我有一个表达式,它将表达式作为其参数之一:
我正在使用 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)。
我不确定上面的示例是否朝着正确的方向发展,如果是,我不确定如何完成它。