C# 自定义表达式树访问者-如何获取UnaryExpression节点';s值多少?

C# 自定义表达式树访问者-如何获取UnaryExpression节点';s值多少?,c#,expression-trees,C#,Expression Trees,我对一元访问者有一个覆盖,它似乎工作得很好,但我需要从节点获取操作数的值 如果是恒压,则很容易实现: var value = ((ConstantExpression) node.Operand).Value; 问题是,如果节点是一个值类型为int的MemberExpression,如何实现这一点: protected override Expression VisitUnary(UnaryExpression node) { //get the va

我对一元访问者有一个覆盖,它似乎工作得很好,但我需要从节点获取操作数的值

如果是恒压,则很容易实现:

var value = ((ConstantExpression) node.Operand).Value;
问题是,如果节点是一个值类型为int的MemberExpression,如何实现这一点:

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

无法保证
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;
}