我对一元访问者有一个覆盖,似乎运行良好,但我需要从节点获取操作数的值。
如果它是ConstantExpression,则很容易实现:
var value = ((ConstantExpression) node.Operand).Value;
问题是如果节点是具有类似int的值类型的MemberExpression,如何实现此目的:
protected override Expression VisitUnary(UnaryExpression node)
{
//get the value stored in the node.Operand
}
答案 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