自定义表达式树访问者 - 如何获取UnaryExpression节点的值?

时间:2017-03-08 08:52:23

标签: c# expression-trees

我对一元访问者有一个覆盖,似乎运行良好,但我需要从节点获取操作数的值。

如果它是ConstantExpression,则很容易实现:

var value = ((ConstantExpression) node.Operand).Value;

问题是如果节点是具有类似int的值类型的MemberExpression,如何实现此目的:

protected override Expression VisitUnary(UnaryExpression node)
{                 
    //get the value stored in the node.Operand     
}

1 个答案:

答案 0 :(得分:0)

无法保证UnaryExpression与常量值相关联......在x => (int)x例如(int)UnaryExpression是未连接的// Unravel (object)(long)5 while (node.Operand is UnaryExpression) { node = (UnaryExpression)node.Operand; } ConstantExpression ce = node.Operand as ConstantExpression; if (ce != null) { // success! object value = ce.Value; } 一个恒定的价值。

但是......你可以检查一下......

Ctrl-Space