read objeto example enum dinamicos dinamico custom create c# dynamicobject

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...



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).