2010-10-26 91 views
37

我想創建一個匿名類型,我可以動態地設置屬性名稱。它不一定是一個匿名類型。我想實現的是動態設置任何對象屬性名稱。它可以是ExpandoObject等,但字典不適合我。 你有什麼建議? 非常感謝動態創建匿名類型?

+0

爲什麼字典不適合您? – dtb 2010-10-26 14:35:03

+2

因爲我必須將它綁定到telerik網格的數據源,並且我還動態添加網格的列。 – ward87 2010-10-26 14:36:59

回答

41

只有ExpandoObject可以有動態屬性。

編輯: 這裏是Expand Object使用的例子(從MSDN描述):

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

是的,我知道這一點。但我可以從字符串數組設置ExpandoObjects屬性爲例? – ward87 2010-10-26 14:38:18

+5

......好吧,或者其他實現'IDynamicMetaObjectProvider'的類型。 – 2010-10-26 14:38:39

+3

ExpandoObject實現了'IDictionary ',所以你可以把它當作字典來填充它。 – stevemegson 2010-10-26 14:41:01

29

你可以施放ExpandoObject到詞典和填充這樣的說法,那麼說明你定會鍵在ExpandoObject上顯示爲屬性名稱...

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這非常狂野,我不知道動力有這種能力。其他語言具有類似的功能,這肯定會有一些很好的用例。另一方面,它也可能被非常糟糕地濫用,並且應該得到應有的尊重。 – AaronLS 2013-11-06 21:53:21