example - objeto dinamico c#
Propiedades de DynamicObject Loop (2)
Estoy tratando de entender el tipo DynamicObject. Encontré que este artículo de MSDN es muy sencillo y claro sobre cómo crear y usar DynamicObject:
http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx
El artículo contiene una clase simple de DynamicDictionary que hereda de DynamicObject.
Ahora quiero iterar sobre mis propiedades DynamicObject creadas dinámicamente:
dynamic d = new DynamicDictionary();
d.Name = "Myname";
d.Number = 1080;
foreach (var prop in d.GetType().GetProperties())
{
Console.Write prop.Key;
Console.Write prop.Value;
}
Obviamente eso no funciona. Quiero aprender cómo hacer esto sin un cambio en mi clase DynamicDictionary, ya que realmente estoy tratando de aprender a usar esto para todo tipo de objetos existentes que se hereden de DynamicObject.
¿Se necesita reflexión? Debo estar perdiendo algo...
¿Has probado el método DynamicDictionary.GetDynamicMemberNames ()? - http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.getdynamicmembernames.aspx
Creo que estarías interesado en la clase ExpandoObject
. La clase DynamicObject
es solo una base donde se supone que debes proporcionar toda la lógica. Implementa explícitamente la IDictionary<string, object>
para que pueda acceder a sus propiedades o agregar otras nuevas de esa manera.
// declare the ExpandoObject
dynamic expObj = new ExpandoObject();
expObj.Name = "MyName";
expObj.Number = 1000;
// print the dynamically added properties
foreach (KeyValuePair<string, object> kvp in expObj) // enumerating over it exposes the Properties and Values as a KeyValuePair
Console.WriteLine("{0} = {1}", kvp.Key, kvp.Value);
// cast to an IDictionary<string, object>
IDictionary<string, object> expDict = expObj;
// add a new property via the dictionary reference
expDict["Foo"] = "Bar";
// verify it''s been added on the original dynamic reference
Console.WriteLine(expObj.Foo);
Acabo de darme cuenta de que está implementando la clase DynamicDictionary
y malinterpreté su pregunta. Lo siento.
Cuando se utiliza con una referencia dinámica, solo tiene acceso a los miembros expuestos públicamente. Ya que solo se declara Count
público (además de los otros miembros de DynamicObject
), necesitaría usar DynamicObject
para acceder al diccionario interno para obtener fácilmente esos valores (si no tiene la intención de realizar más cambios).