2011-12-03 13 views
11

Ho questoAggiunta dinamica di proprietà a un oggetto dinamico?

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

così, so che d avrà un nome di proprietà. Ora se non conosco il nome della proprietà in fase di compilazione, come aggiungo quella proprietà alla dinamica. ho trovato questo SO Question

così, c'è questo complicato concetto di rilegatore di chiamate ecc .. che è difficile da ottenere in primo luogo. Un modo più semplice di fare questo?

+0

possibile duplicato del [Aggiunta sconosciuta (in fase di progettazione) oggetti da un ExpandoObject] (http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – nawfal

risposta

23
dynamic d = new ExpandoObject(); 
((IDictionary<string,object>)d)["test"] = 1; 
//now you have d.test = 1 
4

si può anche fare in questo modo: -

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

buon modo ... molto più pulito .. –

5

Ecco un modo più pulito

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