以下是對Get name of property as a string的後續問題。如何從屬性訪問lambda中提取對象引用
給定一個方法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參考。
在此先感謝。
有要調用這個使用反射,而不是編譯拉姆達一個原因:
您可以通過編輯它返回它的函數獲取對象?這似乎是您首先需要擁有者的唯一原因...... – 2010-05-12 20:53:08
我是lambda新手的唯一原因:)我將如何使用lambda執行屬性訪問?我剛剛嘗試過(作爲猜測): var v = Expression.Lambda>(propertyLambda).Compile(); object o = v(); 但沒有得到一個可理解的結果。 –
2010-05-12 21:20:44
Cool ... this works: object o = Expression.Lambda(propertyLambda.Body).Compile()。DynamicInvoke(); 感謝提示,亞當。 – 2010-05-12 21:35:33