【发布时间】:2012-01-12 15:34:48
【问题描述】:
考虑下面的代码:
var vectorTest = new Vector2(1, 2) + new Vector2(3, 4); // Works
var x = Expression.Parameter(typeof(Vector2), "x");
var test = System.Linq.Dynamic
.DynamicExpression.ParseLambda(new[] { x }, null, "x = x + x");
运行它,我得到以下异常:
System.Linq.Dynamic.ParseException 未被用户代码处理 Message=Operator '+' 与操作数类型 'Vector2' 和 'Vector2' 不兼容 源=动态LINQ 位置=6
如何让解析器“看到”+ 类型的 + 运算符重载?
编辑:= 运算符也有同样的问题。
查看源代码,我可以明白为什么,它查看了一个特殊的接口,该接口列出了简单类型的方法负载,如果找不到,则会引发异常。麻烦的是,我的类型 (Vector2) 不在那个列表中,所以它永远找不到操作符方法。
【问题讨论】:
-
George,我已经恢复了我的立场,即您是否应该只创建 any 接口或从给定接口之一扩展。我认为从其中一个接口扩展会更安全。将来可能会或可能不会进行额外的类型检查(例如类型实际上是否支持添加)或诸如此类。
-
好点,谢谢;我已经相应地更改了我的代码。
标签: c# linq expression-trees dynamic-linq