Когда вы фиксируете переменную итерации цикла for, С# обрабатывает эту переменную, как если бы она была объявлена вне цикла. Это означает, что одна и та же переменная фиксируется на каждой итерации. Следующая программа записывает 333 вместо записи 012:
Action[] actions = new Action[3];
for (int i = 0; i < 3; i++)
actions [i] = () => Console.Write (i);
foreach (Action a in actions) a(); // 333
Я читаю С# в двух словах (5-е издание), и сегодня я наткнулся на это, но я не могу понять, почему вывод 333
, а не 012
. Это потому, что значение i
, которое печатается, является значением после цикла? Как это возможно? i
должен быть удален после цикла, не так ли?