kullanarak değer tiplerinin bir örneğini oluşturmak , System.String
System.Boolean
, System.Int32
vb ben System.String
veyaMyNamespace.Employee
gibi türleri nitelikli isimleri almak ve oluşturmak zorunda bir örnek ve geri dönün. Örnekler oluşturmak için Activator.CreateInstance
ve FormatterServices.GetUninitializedObject
kullanıyorum. Ancak, değer türleri durumunda başarısız olur. Değer tipleri durumunda mantığı kodlayamıyorum. Hem değer türlerinin hem de referans türlerinin örneklerini oluşturmanın genel bir yoluna ihtiyacım var.nasıl gibi değer türleri bir örneğini oluşturmak istediğiniz yansıma
cevap
Tam olarak ne yapmaya çalışıyorsunuz? FormatterServices.GetUninitializedObject
, esas olarak serileştirme kodu ile kullanılır; Bunun dışında gerçekten kullanmamalısınız. Sadece tam olarak
TypeConverter tc = TypeDescriptor.GetConverter(someType);
object obj = tc.ConvertFromString(s);
Teşekkürler yardımcı oldu. –
Oh, jenerik şeyler için çok güzel :) – Nyerguds
başarısız Ne (bu türler için) yani TypeConverter
gibi bir şey, ihtiyacınız varmış gibi sesler?
var instance = Activator.CreateInstance(typeof(Int32));
Bana tam olarak kod başarısız 0'a
olarak ayarlanmış bir Int32 örneğini verir: Ben değer türleri ile ilgili bir sorun olup olmadığını görmek için aşağıdaki kodu çalıştı? Aksi halde sorunun, örneği oluştururken değil, türünü yükleme biçiminde yattığını söyleyebilirim.
Eish Jaco! 'Var' bir 'int' olarak değiştirmeye geri döndüm, çünkü 'var' durumu OP'ye yabancı değildi ve siz de benim gibi aynı kod satırına gizlice girdin. :-) – ProfK
Haha - çekilişte çabuk olmalısınız :-) –
Bu benim için çalışıyor: BCL Değer Türleri İçin
int x = (int)Activator.CreateInstance(typeof (Int32), true);
(ve türlerini tanımlamak için dizeleri kullanarak) C# anahtar kelime kullanmadığından emin ve Tip ad ile tam olduğundan emin olun. Örneğin, C# int başarıyla "Int32"
gibi "int"
veya kısa formları gibi dile özgü adlar kullanmayı denerseniz başarısız girişim alacak Activator.CreateInstance (..)
object num = Activator.CreateInstance(Type.GetType("System.Int32"));
ile bu şekilde oluşturulur.
System.String, başvuru türü değil, bir değer türüdür. –