以下是Get name of property as a string的后续问题。
给定方法Foo(为简洁省略错误检查):
// Example usage: Foo(() => SomeClass.SomeProperty)
// Example usage: Foo(() => someObject.SomeProperty)
void Foo(Expression<Func<T>> propertyLambda)
{
var me = propertyLambda.Body as MemberExpression;
var pi = me.Member as PropertyInfo;
bool propertyIsStatic = pi.GetGetMethod().IsStatic;
object owner = propertyIsStatic ? me.Member.DeclaringType : ???;
...
// Execute property access
object value = pi.GetValue(owner, null);
}
我有静态属性的情况,但不知道如何在实例属性的情况下获得对someObject的引用。
提前致谢。
答案 0 :(得分:1)
MemberExpression
有一个名为Expression
的属性,该属性是成员访问的对象。
您可以通过编译返回它的函数来获取对象:
var getSomeObject = Expression.Lambda<Func<object>>(me.Expression).Compile();
var someObject = getSomeObject();