0

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

在此处输入图像描述

我正在使用 ExpressionVisitor 来获取常量的值,请参阅此 SO 帖子

但如果成员是 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 (Age)。

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

4

0 回答 0