c# – 动态线程和运算符重载
发布时间:2020-12-15 17:51:10 所属栏目:百科 来源:网络整理
导读:考虑下面的代码: var vectorTest = new Vector2(1,2) + new Vector2(3,4); // Worksvar x = Expression.Parameter(typeof(Vector2),"x");var test = System.Linq.Dynamic .DynamicExpression.ParseLambda(new[] { x },null,"x = x + x"); 运行它,我得到以下
考虑下面的代码:
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"); 运行它,我得到以下异常:
如何让解析器看到Vector2类型的操作符重载? 编辑:我也得到与=运算符相同的问题. 解决方法
使用DynamicLinq库,您需要将签名添加到System.Linq.Dynamic.ExpressionParser中的一个签名接口中.它只会解析它识别的操作.
看来它将会看到在ExpressionParser中发现的所有私有接口.只需在ExpressionParser中添加一个接口,并且似乎可以抑制错误. interface ICustomSignatures { void F(Microsoft.Xna.Framework.Vector2 x,Microsoft.Xna.Framework.Vector2 y); } 为了安全(并且可能符合预期的模式),从IAddSignatures界面添加/扩展可能更安全. interface ICustomSignatures : IAddSignatures { void F(Microsoft.Xna.Framework.Vector2 x,Microsoft.Xna.Framework.Vector2 y); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |