11

私はこれを持っています

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

だから、私はdがプロパティNameを持つことを知っています。コンパイル時にプロパティの名前がわからない場合、そのプロパティをダイナミックに追加するにはどうすればよいですか。私はこのSOの質問を見つけました

だから、そもそも取得するのが難しいコールバインダーなどのこの複雑な概念があります。これを行うためのより簡単な方法はありますか?

4

3 に答える 3

26
dynamic d = new ExpandoObject();
((IDictionary<string,object>)d)["test"] = 1;
//now you have d.test = 1
于 2011-12-03T16:08:12.263 に答える
7

これがよりクリーンな方法です

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

于 2013-12-13T15:22:20.093 に答える
4

次のようにすることもできます:-

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;
        }
于 2011-12-03T17:24:40.320 に答える