C#4.0 Dynamic vs Expando ......它们适合哪里?

时间:2010-08-22 04:32:49

标签: c#-4.0 expandoobject dynamicobject dynamic-keyword

我正在尝试学习C#4.0附带的所有新功能。我无法理解DynamicObjectExpandoObject类型之间的差异。似乎使用了DynamicObject,例如当您想要在与COM / Office对象交谈时从Python脚本和ExpandoObject访问变量时。我对吗?它们的用途有何不同?

1 个答案:

答案 0 :(得分:88)

Expando 是一种 dynamic类型,可以在运行时添加(或删除)成员。 dynamic旨在允许.NET在与动态类型语言(如Python和JavaScript)交互时与类型进行互操作。

因此,如果您需要处理动态类型:使用dynamic并且如果您需要处理XML或JSON等动态数据:使用ExpandoObject

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

dynamic expando = new ExpandoObject();

添加新属性的能力:

expando.SomeNewStringVal = "Hello World!";

最后一行代码在expando对象中创建了一个名为SomeNewStringVal的全新字符串属性。字符串类型是从赋值中推断出来的。

因此,expando是一种动态数据类型,可以表示动态变化的数据。简而言之就是这样。 Here's a deeper look at dynamic and 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);
    }
}