【问题标题】:C# 4.0 Dynamic vs Expando... where do they fit?C# 4.0 Dynamic 与 Expando ......它们适合哪里?
【发布时间】:2010-08-22 04:32:48
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

所以,如果你需要处理动态类型:使用dynamic,如果你需要处理动态数据,例如 XML 或 JSON:使用 ExpandoObject

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

dynamic expando = new ExpandoObject();

以及添加新属性的能力:

expando.SomeNewStringVal = "Hello World!";

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

因此,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);
    }
}

【讨论】:

  • 虽然他接受了,但我认为OP意味着DynamicObject和ExpandoObject之间的区别。
  • 请注意,这在现实世界中有时会派上用场。在序列化为 xml 或 json 之前,我只是用它来创建动态响应对象。这样,我可以递归地添加具有不同属性名称的子类,而无需定义大量显式属性。 "GroupsL1": [{ "GroupingL2:: [{...
  • DynamicObject 未解决。 MSDN:提供了一个基类,用于指定运行时的动态行为。这个类必须继承自;您不能直接实例化它。 MSDN 页面包含基于DynamicObject 的简化ExpandoObject 实现。因此,这两种类型都用于后期绑定,但 ExpandoObject 是具体的(并且是密封的),而 DynamicObject 只是自定义动态对象的基类。
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2016-12-31
  • 2015-02-25
  • 1970-01-01
相关资源
最近更新 更多