使用ExpressionVisitor如何动态获取ParameterExpression表达式的评估值

时间:2019-05-01 11:38:54

标签: c# expressionvisitor

我有一个表达式,它将表达式作为其参数之一:

enter image description here

我正在使用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中的节点值为:

enter image description here

我有权访问T和TMember。其中T是主要对象,所有这些都被称为(具有属性Age),而TMember在这种情况下称为int(年龄)。

我不确定上面的示例是否朝着正确的方向前进,如果不确定,我该如何完成它。

0 个答案:

没有答案