Что выведет цикл foreach по actions, если в цикле for добавлять лямбды () => Console.WriteLine(count) для count от 0 до 9?

C# / .NET Основы языка Junior

Что это: Лямбда захватывает переменную count по ссылке, а не по значению на момент создания делегата. К моменту вызова цикл завершён и count равен 10, поэтому все десять вызовов выведут 10.

Почему важно: Классическая ловушка с замыканиями в C#; часто встречается в задачах на собеседованиях и при подписке на события в циклах.

Под капотом: Компилятор создаёт display class с полем для захваченной переменной. Все делегаты ссылаются на одно поле, которое обновляется на каждой итерации цикла for.

Типичная ошибка: Ожидать вывод 0..9 и пытаться исправить только порядок foreach, не создавая локальную копию int copy = count внутри цикла.

List<Action> actions = new List<Action>();
for (var count = 0; count < 10; count++)
  actions.Add(() => Console.WriteLine(count));

foreach (var action in actions)
  action();