Динамически добавлять свойства в динамический объект? - PullRequest
11 голосов
/ 03 декабря 2011

У меня есть это

dynamic d = new ExpandoObject();
d.Name = attribute.QualifiedName.Name;

, поэтому я знаю, что у d будет свойство Name.Теперь, если я не знаю имя свойства во время компиляции, как мне добавить это свойство в динамический.я нашел это SO Вопрос

Итак, есть эта сложная концепция связывателей вызовов и т. д., что трудно получить в первую очередь. Какой более простой способ сделать это?

Ответы [ 3 ]

24 голосов
/ 03 декабря 2011
dynamic d = new ExpandoObject();
((IDictionary<string,object>)d)["test"] = 1;
//now you have d.test = 1
5 голосов
/ 13 декабря 2013

Вот чище

var myObject = new ExpandoObject() as IDictionary<string, Object>; myObject.Add("Country", "Ireland");

4 голосов
/ 03 декабря 2011

Вы также можете сделать так: -

Dictionary<string,object> coll = new Dictionary<string,object>();
    coll.Add("Prop1","hello");
    coll.Add("Prop2",1);
    System.Dynamic.ExpandoObject obj = dic.Expando();

//You can have this ext method to better help

public static ExpandoObject Expando(this IEnumerable<KeyValuePair<string, object>> 
dictionary)
        {
            var expando = new ExpandoObject();
            var expandoDic = (IDictionary<string, object>)expando;
            foreach (var item in dictionary)
            {
                expandoDic.Add(item);
            }
            return expando;
        }
...