Ну, две вещи.
Во-первых, да, вы можете значения вещи в ExpandoObject объекта, используя «имена свойств», содержащихся в строках, так как он реализует IDictionary<string, object>
, так что вы можете сделать это следующим образом:
void Main()
{
dynamic obj = new ExpandoObject();
var dict = (IDictionary<string, object>)obj;
dict["propName1"] = "test";
dict["propName2"] = 24;
Debug.WriteLine("propName1=" + (object)obj.propName1);
Debug.WriteLine("propName2=" + (object)obj.propName2);
}
Обратите внимание, как я используйте синтаксис свойства для получения там значений. К сожалению, dynamic
похож на вирус и распространяется, и Debug.WriteLine
не очень-то радуется dynamic
значениям, поэтому мне пришлось бросить на object
.
Однако, это второе, если вы не знаете имена свойств до выполнения, эти две последние строки не будут отображаться нигде в вашей программе. Единственный способ получить значения - это снова привести его в словарь.
Так вы лучше просто использовать словарь, чтобы начать с:
void Main()
{
var obj = new Dictionary<string, object>();
obj["propName1"] = "name";
obj["propName2"] = 24;
Debug.WriteLine("propName1=" + obj["propName1"]);
Debug.WriteLine("propName2=" + obj["propName2"]);
}
не словарь достаточно? – BlackBear
Если вы не знаете имена свойств до выполнения, как вы собираетесь читать значения после этого? Как @BlackBear говорит, почему вы не можете использовать словарь? –
Посмотрите здесь: http://stackoverflow.com/questions/14420427/add-property-to-poco-class-at-runtime –