次のコードは、012 ではなく 33 を出力します。新しい変数 loopScopedi が、同じ変数をキャプチャするのではなく、各反復でキャプチャされない理由がわかりません。
Action[] actions = new Action[3];
for (int i = 0; i < 3; i++)
{
actions [i] = () => {int loopScopedi = i; Console.Write (loopScopedi);};
}
foreach (Action a in actions) a(); // 333
ただし、このコードは 012 を生成します。この 2 つの違いは何ですか?
Action[] actions = new Action[3];
for (int i = 0; i < 3; i++)
{
int loopScopedi = i;
actions [i] = () => Console.Write (loopScopedi);
}
foreach (Action a in actions) a(); // 012