C# 4.0 Динамический против Expando... где они подходят?
Я пытаюсь узнать все новые вкусности, которые идут с C# 4.0. Я не понимаю различий между DynamicObject
а также ExpandoObject
типы. Это похоже на DynamicObject
используется, например, когда вы хотите получить доступ к переменным из скриптов Python и ExpandoObject
при общении с объектами COM/Office. Я прав? Какая разница в их использовании?
1 ответ
Expando является dynamic
тип, к которому элементы могут быть добавлены (или удалены) во время выполнения. dynamic
разработан, чтобы позволить.NET взаимодействовать с типами при взаимодействии с динамическими языками типизации, такими как Python и JavaScript.
Итак, если вам нужно обработать динамический тип: используйте dynamic
и если вам нужно обрабатывать динамические данные, такие как XML или JSON: используйте ExpandoObject
Объявление экспансии показывает связь между динамикой и экспансией:
dynamic expando = new ExpandoObject();
И возможность добавить новое свойство:
expando.SomeNewStringVal = "Hello World!";
Эта последняя строка кода создает новое строковое свойство в объекте expando, называемом 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);
}
}