2011-02-17 4 views
1

람다 식에서 개인 속성을 참조 할 수 있습니까? 아니면 공공의 소유물일까요?참조 람다 식의 전용 속성?

예를 들면. 코드의 라인이 될 것이다, 내 개인 재산이 InnerCollection라는 말 :

x => x.InnerCollection 

어떻게 든이를 달성 할 수있는 방법이 있나요 - 등 반사를 사용하지 않고는?

. NET 4.0을 사용 중입니다.

감사합니다.

크리스

+0

"사유 재산은"당신이 클래스의 외부에서 액세스 할 수 없음을 의미 :

public static Func<T, R> GetFieldAccessor<T, R>(string fieldName) { ParameterExpression param = Expression.Parameter(typeof(T), "arg"); MemberExpression member = Expression.Field(param, fieldName); LambdaExpression lambda = Expression.Lambda(typeof(Func<T, R>), member, param); Func<T, R> compiled = (Func<T, R>)lambda.Compile(); return compiled; } 

사용은 것 같이 보입니다. –

답변

0

람다 정의가 private 필드/속성이 정의 된 클래스의 메서드에 없다면, 없습니다. 그러면 반성을 다루어야 할 것입니다.

+0

"클래스 안에 있지 않으면"람다 정의가 아니라 람다 호출을 참조하는 것처럼 들립니다. 아래에 헹크의 대답을 적어 두십시오. – shannon

6

아니,하지 않는 한 (가능성) 람다가 x의 클래스의 메서드 내 정의된다.

0

클래스의 외부 또는 내부에서 사용할 수 있습니다. 현재 필드에서만 작동하지만 원하는 경우 속성에 대해 수정할 수 있습니다.

public class MyClass 
{ 
    private int _secret = 10; 
} 

var myClass = new MyClass(); 
Console.WriteLine("func:" + GetFieldAccessor<MyClass, int>("_secret").Invoke(myClass));