C # 4.0 Динамический против Expando ... где они подходят? - PullRequest
49 голосов
/ 22 августа 2010

Я пытаюсь изучить все новые вкусности, которые идут с C # 4.0.Я не понимаю различий между типами DynamicObject и ExpandoObject.Кажется, что DynamicObject используется, например, когда вы хотите получить доступ к переменным из скриптов Python и ExpandoObject при общении с объектами COM / Office.Я прав?Какая разница в их использовании?

1 Ответ

89 голосов
/ 22 августа 2010

Expando - это тип dynamic, к которому можно добавлять (или удалять) элементы во время выполнения.dynamic разработан, чтобы позволить .NET взаимодействовать с типами при взаимодействии с динамическими языками типизации, такими как Python и JavaScript.

Итак, если вам нужно обработать динамический тип: используйте dynamic и если вам нужно обрабатывать динамические данные, такие как XML или JSON: используйте ExpandoObject

Объявление расширения показываетсвязь между динамическим и расширением:

dynamic expando = new ExpandoObject();

И возможность добавить новое свойство:

expando.SomeNewStringVal = "Hello World!";

Эта последняя строка кода создает новое строковое свойство в объекте расширения, называемоеSomeNewStringVal.Тип строки выводится из присваивания.

Таким образом, 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);
    }
}
...