2010-10-26 14 views
37

Özellik adını dinamik olarak ayarlayabileceğim bir anonim yazı tipi oluşturmak istiyorum. anonim tip olmak zorunda değildir. Tek istediğim, özellik isimlerini dinamik olarak ayarlamaktır. Bu ExpandoObject vb olabilir. Ama sözlük benim için çalışmaz. Önerileriniz nelerdir? Çok teşekkürlerAnonim bir tür dinamik olarak mı yaratılıyor?

+0

Neden bir sözlük sizin için çalışmıyor? – dtb

+2

çünkü bunu bir telerik grid'in veri kaynağına bağlamak zorundayım ve aynı zamanda grid sütunlarını dinamik olarak ekliyorum. – ward87

cevap

41

Sadece ExpandoObject dinamik özelliklere sahip olabilir.

Düzenleme:

dynamic sampleObject = new ExpandoObject(); 
sampleObject.TestProperty = "Dynamic Property"; // Setting dynamic property. 
Console.WriteLine(sampleObject.TestProperty); 
Console.WriteLine(sampleObject.TestProperty .GetType()); 
// This code example produces the following output: 
// Dynamic Property 
// System.String 

dynamic test = new ExpandoObject(); 
((IDictionary<string, object>)test).Add("DynamicProperty", 5); 
Console.WriteLine(test.DynamicProperty); 
+0

evet bunu biliyorum. ama örneğin bir dizi dizisinden ExpandoObjects özelliğini ayarlayabilir miyim? – ward87

+5

... iyi ya da 'IDynamicMetaObjectProvider' öğesini uygulayan başka bir tür. –

+3

ExpandoObject, 'IDictionary 'işlevini uygular, bu nedenle bunu, onu yerleştirmek için bir sözlük olarak kullanabilirsiniz. – stevemegson

29

Daha sonra, olur, anahtar kümesini bu şekilde bir sözlüğe ExpandoObject döküm ve onu doldurabilirsiniz: Burada bir (kendi MSDN açıklamasından) Expand Object kullanım örneğidir ExpandoObject öğesinde özellik adları görünür ...

dynamic data = new ExpandoObject(); 

IDictionary<string, object> dictionary = (IDictionary<string, object>)data; 
dictionary.Add("FirstName", "Bob"); 
dictionary.Add("LastName", "Smith"); 

Console.WriteLine(data.FirstName + " " + data.LastName); 
+0

+1 Oldukça vahşi ve dinamikleri bu yeteneği bilmiyordum. Diğer diller benzer yeteneklere sahiptir ve bu kesinlikle birkaç büyük kullanım durumları olacaktır. Öte yandan, aynı zamanda oldukça istismar edilebilir ve aynı zamanda da saygıyla kullanılmalıdır. – AaronLS

İlgili konular