Выбор ответа Middle Делегаты и события спрашивают часто обновлено
Замыкание на переменную цикла for
Вопрос
Что выведет код?
var actions = new List<Action>();
for (int i = 0; i < 3; i++)
actions.Add(() => Console.Write(i + " "));
foreach (var a in actions) a();
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 3 3 3. Переменная i у цикла for одна на весь цикл, и все три лямбды захватывают её саму, а не значение.
Варианты ответа
0 1 22 2 20 0 03 3 3правильный ответ
Разбор
Переменная i у цикла for одна на весь цикл, и все три лямбды захватывают её саму, а не значение. К моменту вызова цикл завершился, i равна 3. В foreach с C# 5 переменная своя на каждую итерацию, и там вывод был бы 0 1 2. Чтобы исправить for, копируют значение: int copy = i; внутри тела.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.