二元运算符Multiply没有为类型“System.Int32”和“System.Double”定义。为什么以下代码在运行时抛出异常,而以传统方式编译却没有问题地执行它?varleft=Expression.Constant(25d);varright=Expression.Constant(20);//抛出InvalidOperationException!varmultiplyExpression=Expression.Multiply(左,右);var乘法=25d*20;Debug.WriteLine(乘以.ToString());//正常工作!我不会使用Expression.Convert,因为我无法准确判断应该转换哪个表达式。varleft=Expression.Constant(25d);varright=Expression.Constant(20);varmultiplyExpression=Expression.Multiply(left,Expression.Convert(right,left.Type));或者,如果您不知道左侧的精度更高,并且您希望始终以双精度结果结束,那么您可以说:Expressionleft=Expression.Constant(2);表达式权=Expression.Constant(25.1);left=Expression.Convert(left,typeof(double));right=Expression.Convert(right,typeof(double));varmultiplyExpression=Expression.Multiply(左,右);好吧,我想出了如何使用TypeCode枚举来确定哪个节点具有更高的类型精度,然后将后一个节点的类型转换为前一个节点的类型,反之亦然:privatestaticvoidVisit(refExpressionleft,refExpression右){varleftTypeCode=Type.GetTypeCode(left.Type);varrightTypeCode=Type.GetTypeCode(right.Type);如果(左类型代码==右类型代码)返回;如果(leftTypeCode>rightTypeCode)right=Expression.Convert(right,left.Type);否则left=Expression.Convert(left,right.Type);然后你的标题中的错误信息告诉你为什么你得到了异常。没有定义Expression.Multiply方法,它以System.Int32和System.Double作为参数。*会起作用,因为它的级别较低,您的值将自动进行类型转换。以上是C#学习教程:'System.Int32'和'System.Double'类型没有定义二元运算符Multiply。分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——varleft=Expression.Constant(25d);varright=Expression.Constant((double)20);varmultiplyExpression=Expression.Multiply(左,右);//作品本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
