我想在利用DLR绑定机制时访问对象上的一个属性。
- 我无法使用本地绑定机制(C#中的
dynamic
关键字),因为我不知道编译时的属性名称; - 我不能使用反射,因为它只能检索静态类型信息;
- 据我所知,将其转换为
IDictionary<string, object>
,只解决了选择实现该接口的动态类的情况(例如ExpandoObject
)。
这是演示代码:
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();
}