【发布时间】:2016-04-05 12:23:25
【问题描述】:
我正在尝试更改表达式树的一部分,其中将 MyEnum 类型的属性 X 与某个值 x 进行比较:
$model.X == .Constant<MyEnum>(x)
我想修改树以替换比较,将Guid 类型的属性 Y 与值 y(将从 x 派生)进行比较。
$model.Y == .Constant<Guid>(y)
所以我从ExpressionVisitor 继承,并覆盖VisitMember 以用Y 代替X,我已经覆盖VisitConstant 以用y 代替x。
运行它会产生以下InvalidOperationException:
System.InvalidOperationException : 重写的表达式调用运算符方法'Boolean op_Equality(System.Guid, System.Guid)',但原始节点没有运算符方法。如果这是故意的,请覆盖“VisitBinary”并将其更改为允许此重写。
我的主要问题是:我必须在VisitBinary 中做什么?我的问题是:为什么异常消息告诉原始节点没有操作符方法。我认为这不是真的。它肯定没有op_Equality(System.Guid, System.Guid),但我认为它有MyEnum 类型的相等运算符。
【问题讨论】:
标签: c# expression-trees linq-expressions