C # 4.0 Dynamic vs Expando… где они подходят?

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

49
задан Palec 26 August 2017 в 09:11
поделиться

1 ответ

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

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

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

dynamic expando = new ExpandoObject();

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

expando.SomeNewStringVal = "Hello World!";

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

Итак, раскрытие - это динамический тип данных, который может представлять динамически изменяющиеся данные. Вот и все в двух словах. Вот более подробный взгляд на динамический и расширенный .

Полный пример:

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);
    }
}
90
ответ дан 7 November 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: