Примечание: всегда есть анонимные типы, если вы знаете имена свойств статически и не хотите добавлять их после инициализации.
етил, что новыйExpandoObject
инвентарьIDictionary<string,object>
который имеет необходимыеIEnumerable<KeyValuePair<string, object>>
а такжеAdd(string, object)
методы, и поэтому должна быть возможность использовать синтаксис инициализатора коллекции для добавления свойств к объекту expando так же, как вы добавляете элементы в словарь.
Dictionary<string,object> dict = new Dictionary<string,object>()
{
{ "Hello", "World" }
};
dynamic obj = new ExpandoObject()
{
{ "foo", "hello" },
{ "bar", 42 },
{ "baz", new object() }
};
int value = obj.bar;
Но, кажется, нет способа сделать это. Ошибка:
«System.Dynamic.ExpandoObject» не содержит определения «Добавить»
Я предполагаю, что это не работает, потому что интерфейс реализован явно. но есть ли способ обойти это? Это отлично работает,
IDictionary<string, object> exdict = new ExpandoObject() as IDictionary<string, object>();
exdict.Add("foo", "hello");
exdict.Add("bar", 42);
exdict.Add("baz", new object());
но синтаксис инициализатора коллекции намного аккуратнее.