15

ラムダ式内では割り当てができないという印象を受けました。たとえば、次の (確かにあまり役に立たない) コード

Expression<Action<int, int>> expr = (x, y) => y = x;

コンパイラ エラーを生成します。

An expression tree may not contain an assignment operator

それでも、Microsoft のドキュメントによると、 を使用して代入式をプログラムで作成できますExpression.Assign。私が間違っていない限り、次のコードは同等のものを生成しますExpression:

ParameterExpression xparam = Expression.Parameter(typeof(int), "x");
ParameterExpression yparam = Expression.Parameter(typeof(int), "y");
BinaryExpression body = Expression.Assign(yparam, xparam);
var expr = Expression.Lambda<Action<int, int>>(body, xparam, yparam);
var cexpr = expr.Compile();

この場合、コンパイラは文句を言いません。ここでいくつかの重要な違いが欠けているように感じます。

4

2 に答える 2