2010-10-26 159 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