Get name of property as a string에 대한 후속 질문입니다. 속성 액세스 람다에서 객체 참조를 추출하는 방법
는 (오류가 간결함을 위해 생략 검사) 방법 푸를 감안할 때 : 나는 작업 정적 속성 케이스를 가지고 있지만 인스턴스 속성 경우 여기서 someObject에 대한 참조를 가져 오는 방법을 모르는// 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);
}
.
미리 감사드립니다.
당신이 반사를 사용하는 대신 람다를 컴파일이를 호출 할 이유가 있습니까 :
당신은 그것을 반환하는 함수를 컴파일하여 객체를 얻을 수 있나요? 그 첫 번째 장소에서 소유자가 필요 유일한 이유가 나타납니다 ... –
유일한 이유는 내가 람다 초보 :) 나는 람다를 사용하여 속성 액세스를 어떻게 실행합니까? 방금 시도한 것 (추측) : var v = Expression.Lambda> (propertyLambda) .Compile(); 개체 o = v(); 하지만 이해할 수없는 결과를 얻지 못했습니다. –
쿨 ...이 작동합니다 : 개체 o = Expression.Lambda (propertyLambda.Body) .Compile(). DynamicInvoke(); 힌트를 보내 주셔서 감사합니다, Adam. –