0

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;
});

ラムダ式から 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 全体を取得することについては何もありません。誰かがこれを以前にやったことがありますか、それとも私を正しい方向に向けるのを助けることができますか?

4

2 に答える 2