MemberExpression에서 하위 속성에 대한 MemberInfo를 가져 오려고합니다. 중첩 형식의 전체 이름을 가져 오는 방법을 찾았지만 중첩 형식의 전체 MemberInfo를 가져 오는 방법은 찾지 못했습니다. 저는 여기에 대해서 이야기 시나리오의 간단한 예입니다 (목표는 결국 자식 클래스의 데이터 속성 MemberInfo가를 얻는 것입니다)MemberExpression에서 하위 속성의 MemberInfo 가져 오기
일부 간단한 모델은
public class Parent
{
public int ParentProperty { get; set; }
public Child Child { get; set; }
}
public class Child
{
public string Data { get; set; }
}
람다 표현식
Expression<Func<Parent,string>> func = new Func<Parent, string>(p =>
{
return p.Child.Data;
});
람다 식에서 MemberInfo를 가져 오는 데 사용되는 코드입니다. 나는 부모 클래스의 ParentProperty을 얻으려고 노력한다면
internal static MemberInfo FindMemberInfoFromLambda(LambdaExpression lambda)
{
var expression = (Expression) lambda;
var flag = false;
while (!flag)
{
switch (expression.NodeType)
{
case ExpressionType.Convert:
expression = ((UnaryExpression) expression).Operand;
continue;
case ExpressionType.Lambda:
expression = ((LambdaExpression) expression).Body;
continue;
case ExpressionType.MemberAccess:
var memberExpression = (MemberExpression) expression;
if (memberExpression.Expression.NodeType == ExpressionType.Parameter ||
memberExpression.Expression.NodeType == ExpressionType.Convert)
return memberExpression.Member;
throw new Exception();
default:
flag = true;
continue;
}
}
throw new Exception();
}
이 코드는 잘 작동하지만, 나는 자식 클래스의 데이터 속성 MemberInfo가 얻을하려고 할 때, 그것은 작동하지 않습니다. 자식 속성의 전체 이름을 가져 오는 것에 게시 된 StackOverflow 질문 몇 개를 보았지만 전체 MemberInfo를 가져 오는 데는 아무 것도 보지 않았습니다. 누구든지 전에 이것을했거나 올바른 방향으로 나를 가리킬 수 있습니까?
좋은, 간결, 전체 코드 예제를 제시해주십시오. 무엇보다도 델리게이트 타입'Func'에서'MemberExpression' 인스턴스로 어떻게 이동하는지 보여줍니다. http://stackoverflow.com/help/mcve 참조하십시오. –
람다 표현식을 가져 와서 MemberType을 가져 오는 방법을 보여주는 코드 예제가 업데이트되었습니다. –