考慮下面的代碼:動態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