2011-12-03 28 views
11

tengo este¿Agrega propiedades dinámicamente a un objeto dinámico?

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

lo tanto, sé que d tendrá un nombre de propiedad. Ahora bien, si no conozco el nombre de la propiedad en tiempo de compilación, ¿cómo agrego esa propiedad a la dinámica? encontré esto SO Question

Por lo tanto, existe este complicado concepto de carpetas de llamadas, etc.. Que es difícil de conseguir en primer lugar. ¿Alguna forma más simple de hacer esto?

+0

posible duplicado de [Adición desconocida (en tiempo de diseño) propiedades de un ExpandoObject] (http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – nawfal

Respuesta

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

También se puede hacer la siguiente manera: -

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

buena manera ... mucho más limpio .. –

5

Aquí es una forma más limpia

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

Cuestiones relacionadas