2011-03-15 9 views
6

Normalmente, podemos crear propiedades como esta,¿Es posible usar ExpandoObject para crear propiedades en tiempo de ejecución?

dynamic expando = new ExpandoObject(); 
expando.Price = 45k; 
expando.Value = "Good"; 

En mi caso, no voy a conocer las propiedades tales como "precio" o "Valor" hasta que el tiempo de ejecución. ¿Cómo puedo crear tales propiedades dinámicas? Algo así como,

dynamic expando = new ExpandoObject(); 
expando[properties[0]] = 45k; 
expando[properties[1]] = "Good"; 
expando[properties[2]] = "Red"; 
expando[properties[3]] = 8; 

De todos modos para lograr este tipo de comportamiento.

+0

posible duplicado de [Agregar propiedades desconocidas (en tiempo de diseño) a un ExpandoObject] (http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – stijn

Respuesta

20

Sólo tiene que utilizar el hecho de que se implementa IDictionary<string, Object>:

IDictionary<string, Object> expando = new ExpandoObject(); 
expando[properties[0]] = 45; 
expando[properties[1]] = "Good"; 
expando[properties[2]] = "Red"; 
expando[properties[3]] = 8; 

dynamic d = expando; 
// Now use the properties as normal 

Por otro lado, si usted no sabe las propiedades hasta el tiempo de ejecución, lo que realmente va a consumirlos? Es puede todavía tiene sentido utilizar ExpandoObject - pero igualmente puede tiene sentido utilizar Dictionary<string, object> para empezar.

+0

Gracias por su sugerencia. Tengo el objeto AdomdDataReader. Dado que ningún control de cuadrícula admite objetos AdomdData para vincularse como ItemsSource, me gustaría generar una fuente enumerable más clara de la ADR. Para eso, estaba investigando la dinámica, ya que la mayoría de los controles de cuadrícula admiten enlaces dinámicos. Gracias de nuevo. –

+0

+1, especialmente para señalar que puede ser estúpido usar ExpandoObject en este caso. Actualmente estoy refacturando mi código para usar un diccionario simple en su lugar. :) –

Cuestiones relacionadas