2010-10-26 12 views
37

Quiero crear un tipo anónimo que pueda establecer dinámicamente el nombre de la propiedad. no tiene que ser un tipo anónimo. Todo lo que quiero lograr es establecer los nombres de propiedades de los objetos dinámicamente. Puede ser ExpandoObject, etc. Pero el diccionario no funcionará para mí. ¿Cuáles son sus sugerencias? muchas gracias¿Crear un tipo anónimo dinámicamente?

+0

¿Por qué un diccionario no funciona para usted? – dtb

+2

cos tengo que vincularlo a un datasource de una grilla telerik y también añado dinámicamente las columnas de la grilla. – ward87

Respuesta

41

Solo ExpandoObject pueden tener propiedades dinámicas.

Editar: Aquí está un ejemplo de Expand Object uso (de su descripción de MSDN):

dynamic sampleObject = new ExpandoObject(); 
sampleObject.TestProperty = "Dynamic Property"; // Setting dynamic property. 
Console.WriteLine(sampleObject.TestProperty); 
Console.WriteLine(sampleObject.TestProperty .GetType()); 
// This code example produces the following output: 
// Dynamic Property 
// System.String 

dynamic test = new ExpandoObject(); 
((IDictionary<string, object>)test).Add("DynamicProperty", 5); 
Console.WriteLine(test.DynamicProperty); 
+0

sí, yo sé de eso. pero ¿puedo establecer la propiedad ExpandoObjects desde una matriz de cadenas, por ejemplo? – ward87

+5

... bueno, o cualquier otro tipo que implemente 'IDynamicMetaObjectProvider'. –

+3

ExpandoObject implementa 'IDictionary ', así que sí puede tratarlo como un diccionario para poblarlo. – stevemegson

29

Puedes lanzar ExpandoObject a un diccionario y poblar esa manera, a continuación, las teclas que se establezca se aparecen como nombres de propiedades en ExpandoObject ...

dynamic data = new ExpandoObject(); 

IDictionary<string, object> dictionary = (IDictionary<string, object>)data; 
dictionary.Add("FirstName", "Bob"); 
dictionary.Add("LastName", "Smith"); 

Console.WriteLine(data.FirstName + " " + data.LastName); 
+0

+1 Eso es bastante salvaje y no sabía que la dinámica tenía esta capacidad. Otros idiomas tienen capacidades similares, y esto ciertamente tendría algunos casos de uso geniales. Por otro lado, también podría ser abusado bastante terriblemente y debería usarse con el debido respeto. – AaronLS

Cuestiones relacionadas