2011-12-03 111 views
11

我有這個動態添加屬性到動態對象?

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

所以,我知道d將有一個屬性名稱。現在,如果我在編譯時不知道該屬性的名稱,那麼我如何將該屬性添加到動態中。 我發現這SO Question

所以,這是一個複雜的概念呼叫綁定等等。這是很難得到的第一個place.any簡單的方法做到這一點?

+0

的[添加未知(在設計時),屬性可能重複一個ExpandoObject](http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – nawfal

回答

23
dynamic d = new ExpandoObject(); 
((IDictionary<string,object>)d)["test"] = 1; 
//now you have d.test = 1 
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; 
     } 
+0

個好方法...更清潔.. –

5

這裏是一個更清潔的方式

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