我正在尝试从 MemberExpression 获取子属性的 MemberInfo。我找到了获取嵌套类型全名的方法,但没有找到获取嵌套类型的整个 MemberInfo 的方法。这是我正在谈论的场景的一个简单示例:
一些简单的模型(目标是最终得到Child类的Data属性的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;
});
用于从 lambda 表达式获取 MemberInfo 的代码。
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();
}
如果我试图获取 Parent 类的 ParentProperty,此代码效果很好,但是当我尝试获取 Child 类的 Data 属性的 MemberInfo 时,它不起作用。我已经看到了一些关于获取子属性全名的 StackOverflow 问题,但没有关于获取它的整个 MemberInfo 的内容。有没有人这样做过或者可以帮助我指出正确的方向?