C#4.0dynamic与扩展…他们在哪里适合?

我正在尝试学习C#4.0带来的所有新function。 我无法理解DynamicObjectExpandoObjecttypes之间的区别。 看起来像DynamicObject被使用,例如,当您想要访问与COM / Office对象交谈时从Python脚本和ExpandoObjectvariables。 我对吗? 它们的用途有什么不同?

Expando 是一个 dynamictypes,可以在运行时将成员添加(或删除)到该types中。 dynamic是为了让.NET在与dynamictypes语言(如Python和JavaScript)接口时能够与types互操作。

所以,如果您需要处理dynamictypes:使用dynamic ,如果您需要处理dynamic数据,如XML或JSON:使用ExpandoObject

expando的声明显示了dynamic和expando之间的关系:

 dynamic expando = new ExpandoObject(); 

而且可以添加一个新的属性:

 expando.SomeNewStringVal = "Hello World!"; 

最后一行代码在SomeNewStringVal对象中创build一个名为SomeNewStringVal全新string属性。 stringtypes是从赋值中推断出来的。

所以一个expando是一个dynamic的数据types,可以表示dynamic变化的数据。 这就是简而言之。 这里有更深入的dynamic和expando 。

完整的例子:

 using System; using System.Dynamic; class Program { static void Main(string[] args) { dynamic expando = new ExpandoObject(); expando.SomeNewStringVal = "Hello Brave New Whirrled!"; Console.WriteLine(expando.SomeNewStringVal); // more expando coolness/weirdness: var p = expando as IDictionary<String, object>; p["A"] = "New val 1"; p["B"] = "New val 2"; Console.WriteLine(expando.A); Console.WriteLine(expando.B); } }