53

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

4

1 回答 1

97

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

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

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

dynamic expando = new ExpandoObject();

以及添加新属性的能力:

expando.SomeNewStringVal = "Hello World!";

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

所以expando是一种动态数据类型,可以表示动态变化的数据。简而言之就是这样。这是对 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);
    }
}
于 2010-08-22T05:24:21.987 回答