2010-01-04 16 views
8

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

+3

System.String, başvuru türü değil, bir değer türüdür. –

cevap

11

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); 
+0

Teşekkürler yardımcı oldu. –

+0

Oh, jenerik şeyler için çok güzel :) – Nyerguds

3

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.

+0

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

+0

Haha - çekilişte çabuk olmalısınız :-) –

0

Bu benim için çalışıyor: BCL Değer Türleri İçin

int x = (int)Activator.CreateInstance(typeof (Int32), true); 
1

(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.

İlgili konular