Можно ли использовать ExpandoObject для создания свойств во время выполнения? - PullRequest
6 голосов
/ 15 марта 2011

Обычно мы можем создавать свойства, подобные этому,

dynamic expando = new ExpandoObject();
expando.Price = 45k;
expando.Value = "Good";

В моем случае я не буду знать такие свойства, как "Цена" или "Значение" до момента выполнения.Как я могу создать такие динамические свойства.Что-то вроде

dynamic expando = new ExpandoObject();
expando[properties[0]] = 45k;
expando[properties[1]] = "Good";
expando[properties[2]] = "Red";
expando[properties[3]] = 8;

В любом случае, чтобы добиться такого поведения.

1 Ответ

20 голосов
/ 15 марта 2011

Просто используйте тот факт, что он реализует IDictionary<string, Object>:

IDictionary<string, Object> expando = new ExpandoObject();
expando[properties[0]] = 45;
expando[properties[1]] = "Good";
expando[properties[2]] = "Red";
expando[properties[3]] = 8;

dynamic d = expando;
// Now use the properties as normal

С другой стороны, если вы не знаете свойства до времени выполнения, что на самом деле их будет использовать? может все же имеет смысл использовать ExpandoObject - но в равной степени может имеет смысл использовать Dictionary<string, object> для начала.

...