【发布时间】:2011-07-30 15:29:27
【问题描述】:
为什么下面的代码在运行时抛出异常,而以传统方式编译却没有问题?
var left = Expression.Constant(25d);
var right = Expression.Constant(20);
// Throws an InvalidOperationException!
var multiplyExpression = Expression.Multiply(left, right);
var multiply = 25d * 20;
Debug.WriteLine(multiply.ToString()); // Works normally!
我不会使用Expression.Convert,因为我无法准确确定应该转换哪个表达式。
【问题讨论】:
-
因为以传统方式,编译器会插入(道德等价的)
Expression.Convert- 使用类型优先规则来确定要转换哪一侧。 -
在这种情况下 C# 编译器会转换哪个表达式?
-
只检查“乘法”的类型,它会告诉你哪一边需要转换。
标签: c# linq expression