我有一个表达式,它将表达式作为其参数之一:
我正在使用ExpressionVisitor获取常量see this SO post的值。
但是如果成员是memberAccess类型,我希望能够评估该参数的实际值。在此示例中,($obj.Name).Length
。
该示例要检查int(第一个值)是否大于第二个值(在这种情况下为表达式)。如果它是一个常数,我知道如何获取这些值,但是我无法弄清楚如何动态评估表达式。
我已将整个对象和整个表达式传递到ExpressionVisitor中,以便可以根据需要使用它们来提供帮助。
internal class ValueExtractor : ExpressionVisitor
{
private readonly object _item;
private readonly MethodCallExpression _wholeExpression;
public List<object> Arguments { get; }
protected override Expression VisitMember(MemberExpression node)
{
if (memberType == ExpressionType.MemberAccess)
{
var exp = Expression.Lambda<Func<int>>(node, false, NotSureAboutThis);
exp.Compile().Invoke(NotSureWhichPropGoesHere);
}
}
}
VisitMember中的节点值为:
我有权访问T和TMember。其中T是主要对象,所有这些都被称为(具有属性Age),而TMember在这种情况下称为int(年龄)。
我不确定上面的示例是否朝着正确的方向前进,如果不确定,我该如何完成它。