我想实现一种方法,该方法允许我以后期绑定/动态方式访问未知/匿名对象(-graph)的属性(我什至不知道如何正确调用它)。
这是我想要实现的示例:
// setup an anonymous object
var a = new { B = new { C = new { I = 33 } } };
// now get the value of a.B.C.I in a late-bound way
var i = Get(a, "B.C.I");
这是一个使用“经典”反射的简单实现:
public static object Get(object obj, string expression)
{
foreach (var name in expression.Split('.'))
{
var property = obj.GetType().GetProperty(name);
obj = property.GetValue(obj, null);
}
return obj;
}
使用 C# / .NET 4 我还有哪些其他选项可以实现与上面所示类似的东西,但可能更简单、性能更高等?
也许有办法实现同样的事情,这将允许我指定expression
使用 lambda 表达式而不是字符串?表达式树会以任何方式有帮助吗(例如,如this question所示)?
更新:对象和表达式通过 Web 服务调用传递到我的代码中。这就是为什么我在我的方法中使用object
和。string
Get()