我想從MemberExpression獲取子屬性的MemberInfo。我已經找到了獲取嵌套類型全名的方法,但沒有辦法獲得嵌套類型的整個MemberInfo。這是我講的場景的一個簡單的例子:從MemberExpression獲取子屬性的MemberInfo
一些簡單的模型(我們的目標是最終獲得兒童類的數據屬性的MemberInfo)
public class Parent
{
public int ParentProperty { get; set; }
public Child Child { get; set; }
}
public class Child
{
public string Data { get; set; }
}
Lambda表達式
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();
}
此代碼的偉大工程,如果我試圖讓父類的ParentProperty,但是當我試圖讓子類的數據屬性的MemberInfo,這是行不通的。我看到一些StackOverflow問題發佈在獲取子屬性的全名上,但沒有獲得它的整個MemberInfo。有沒有人以前做過或可以幫助我指出正確的方向?
請表現出良好的,簡潔的,完整的代碼示例。其中一個例子顯示瞭如何從委託類型'Func'獲取到'MemberExpression'的一個實例。請參閱http://stackoverflow.com/help/mcve –
2014-11-09 02:02:08
更新了代碼示例,演示瞭如何使用lambda表達式並從中獲取MemberType – 2014-11-09 04:35:51