3

次のように、aと an (またはその他の不一致のペア) のExpression.Add2 つのデータ型を合計 するために使用したいと思います。doubleint

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);

しかし、私はすぐに次のことを知らされました。

The binary operator Add is not defined for the types 'System.Int32' and 'System.Double'.

考えられるすべての数値のペアに対して演算子が定義されているわけではないことは明らかですが、 の+ようなものを書くと、ある種の暗黙の変換が行われvar x = 1 + 0.5ます。式を使用してこの変換をエミュレートする方法、または式を使用してそのような型を合計する方法はありますか?

4

1 に答える 1

4

Expression.Convertパラメーターの 1 つを反対の型に変換するために使用します。

式ツリーは、言語固有ではないため、暗黙的な変換がどのように機能するかについて「意見」を持っていません。たとえば、C# には、VB.NET とは異なる暗黙的な変換の規則があります。式ツリーは中立的な立場を取り、明示的な変換を必要とします。

たとえば、パフォーマンス指向の言語は、デフォルトでパフォーマンスを優先するため、double を int に暗黙的に変換することを決定する場合があります。この場合、C# は精度を優先します。一般に、式ツリーはこの問題を決定できません。

于 2012-06-23T17:21:55.627 に答える