Deseo acceder a una propiedad en un objeto mientras aprovecho el mecanismo de enlace DLR.Invocar un miembro de un objeto dinámico con un nombre definido en el tiempo de ejecución en un String
- no puedo utilizar el mecanismo de unión nativo (
dynamic
palabra clave en C#), porque no sé el nombre de la propiedad en tiempo de compilación; - No puedo usar la reflexión porque solo recupera información de tipo estático;
- fundición a un
IDictionary<string, object>
, que yo sepa, solo resuelve el caso de las clases dinámicas que eligen implementar esa interfaz (comoExpandoObject
).
Aquí está el código de demostración:
static void Main(string[] args)
{
dynamic obj = new System.Dynamic.ExpandoObject();
obj.Prop = "Value";
// C# dynamic binding.
Console.Out.WriteLine(obj.Prop);
// IDictionary<string, object>
Console.Out.WriteLine((obj as IDictionary<string, object>)["Prop"]);
// Attempt to use reflection.
PropertyInfo prop = obj.GetType().GetProperty("Prop");
Console.Out.WriteLine(prop.GetValue(obj, new object[] { }));
Console.In.ReadLine();
}
cosa es que estoy trabajando bajo el supuesto de que no controlo el objeto dinámico que estoy consumiendo - puede ser cualquier objeto que implemente IDynamicMetaObjectProvider. –