考虑下面的代码:动态LINQ和运算符重载
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是由用户代码 消息未处理=运算符 '+' 与操作数类型的 'Vector2' 和 'Vector2' 源= DynamicLINQ 位置不相容= 6
如何让解析器在Vector2
类型上“看到”+
运算符超载?
编辑:我也遇到了与=
运营商相同的问题。
查看源代码,我可以看到为什么,它查看列出大量方法的特殊界面,对于简单类型,如果找不到它,则会引发异常。麻烦的是,我的类型(Vector2
)不在该列表中,所以它不会找到运算符方法。
George,对于是否应该创建_any_接口或从其中一个给定接口进行扩展,我已经回复了我的观点。我认为从其中一个接口扩展会更安全。未来可能会或可能不会进行额外的类型检查(例如类型实际上是否支持添加)。 – 2012-01-12 21:23:18
好点,谢谢;我已经相应地更改了我的代码。 – 2012-01-12 21:30:46