动态创建匿名类型?

war*_*d87 55 c# dynamic anonymous-types

我想创建一个匿名类型,我可以动态设置属性名称.它不必是匿名类型.我想要实现的是动态设置任何对象属性名称.它可以是ExpandoObject等.但字典对我不起作用.你有什么建议?非常感谢

And*_*zub 56

只能ExpandoObject拥有动态属性.

编辑:以下是展开对象使用的示例(来自其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);
Run Code Online (Sandbox Code Playgroud)

  • ......好吧,或者实现`IDynamicMetaObjectProvider`的任何其他类型. (5认同)
  • ExpandoObject实现了`IDictionary <string,object>`,所以是的,你可以把它当作一个字典来填充它. (5认同)
  • 我添加了另一个示例。如果不是您所需要的,那么在动态状态下您是什么意思? (2认同)

ste*_*son 35

您可以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);
Run Code Online (Sandbox Code Playgroud)

  • +1 这太疯狂了,我不知道动力学有这种能力。其他语言也有类似的功能,这肯定会有一些很好的用例。另一方面,它也可能被非常严重地滥用,并且应该得到应有的尊重。 (3认同)