Что выведет этот код?
var actions = new List<Action>();
for (int i = 0; i < 5; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var action in actions)
{
action();
}
На первый взгляд кажется, что будет:
0
1
2
3
4
Но на самом деле вывод:
5
5
5
5
5
💡 Почему?
Все лямбды замкнулись на одну и ту же переменную i, и когда они выполняются — i уже стало 5.
✅ Как исправить:
for (int i = 0; i < 5; i++)
{
int copy = i;
actions.Add(() => Console.WriteLine(copy));
}
Теперь всё работает как ожидается.
🧠 Замыкания в C# захватывают переменные, а не их значения! Аккуратнее с циклами и лямбдами.