ラムダ式内では割り当てができないという印象を受けました。たとえば、次の (確かにあまり役に立たない) コード
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();
この場合、コンパイラは文句を言いません。ここでいくつかの重要な違いが欠けているように感じます。