[英]How to get value of a property?
我有一個從ExpressionVistor
派生的類,並且我試圖解析一個表達式,例如:
x => x.MyProperty != otherClass.OtherProperty;
我要覆蓋VisitMember:
protected override Expression VisitMember(MemberExpression m)
{
if (m.Expression != null && m.Expression.NodeType == ExpressionType.MemberAccess)
{
var info = m.Member;
return m;
}
}
但是我如何獲得財產價值?
為了獲取值,您需要Member
所有者( Expression屬性- 字段或屬性的包含對象 )為null
(對於靜態屬性/字段), ConstantExpression或另一個MemberAcccessExpression
(還有其他方案,但是這里我們談論簡單的objA.propA.propB.propC
訪問器)。 這就導致了這樣的遞歸幫助器方法:
static bool TryGetValue(MemberExpression me, out object value)
{
object source = null;
if (me.Expression != null)
{
if (me.Expression.NodeType == ExpressionType.Constant)
source = ((ConstantExpression)me.Expression).Value;
else if (me.Expression.NodeType != ExpressionType.MemberAccess
|| !TryGetValue((MemberExpression)me.Expression, out source))
{
value = null;
return false;
}
}
if (me.Member is PropertyInfo)
value = ((PropertyInfo)me.Member).GetValue(source);
else
value = ((FieldInfo)me.Member).GetValue(source);
return true;
}
因此您可以像這樣使用它:
protected override Expression VisitMember(MemberExpression m)
{
object value;
if (TryGetValue(m, out value))
{
// Use the value
}
return m;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.