C# 如何使用Expression.Add对double和int求和?

C# 如何使用Expression.Add对double和int求和?,c#,.net,types,expression,C#,.net,Types,Expression,我想使用表达式。添加对两种数据类型求和,可能是双精度和整数(或任何其他不匹配的对),如下所示: var pLeft = Expression.Parameter(typeof(int), "left"); var pRight = Expression.Parameter(typeof(double), "right"); var addition = Expression.Add(pLeft, pRight); var lambda = Expression.Lambda<Func&l

我想使用
表达式。添加
对两种数据类型求和,可能是
双精度
整数
(或任何其他不匹配的对),如下所示:

var pLeft = Expression.Parameter(typeof(int), "left");
var pRight = Expression.Parameter(typeof(double), "right");

var addition = Expression.Add(pLeft, pRight);
var lambda = Expression.Lambda<Func<int, double, double>>(addition, pLeft, pRight).Compile();

var res = method(1, 0.5);

很明显,
+
运算符并不是为每一对可能的数字定义的,但是当我编写类似于
var x=1+0.5
的代码时,某种隐式转换会继续进行。是否有一种方法可以使用表达式模拟此转换,或者使用表达式对此类类型求和?

使用
expression.Convert
将一个参数转换为另一个参数的类型

表达式树对隐式转换的工作方式没有“意见”,因为它们不是特定于语言的。例如,C#的隐式转换规则与VB.NET不同。表达式树采取中立姿态,需要显式转换


例如,面向性能的语言可能决定隐式地将double转换为int,因为默认情况下它更喜欢性能。在这种情况下,C#更喜欢精确。表达式树通常无法确定此问题。

如何知道要将哪个参数转换为哪个参数?有没有办法检查转换是否存在?
Expression.Convert
是否适用于用户定义的转换?此逻辑完全取决于您。它不是内置的,因为它是特定于编程语言的。这就是我回答的重点。
The binary operator Add is not defined for the types 'System.Int32' and 'System.Double'.