Sobes.tech
Back to questions
Middle+
7

Коллекция функций, цикл 0-9, добавляем лямбды захватывающие i, вызываем все. Что выведет?

Companies where asked
Gravilink

Answer from AI

sobes.tech AI

В C# при создании лямбд внутри цикла, которые захватывают переменную цикла (например, i), все лямбды будут ссылаться на одну и ту же переменную i. После завершения цикла значение i будет равно 10, поэтому при вызове всех лямбд они выведут 10.

Пример:

var actions = new List<Action>();
for (int i = 0; i < 10; i++)
{
    actions.Add(() => Console.WriteLine(i));
}

foreach (var action in actions)
{
    action(); // выведет 10 десять раз
}

Чтобы получить ожидаемый вывод от 0 до 9, нужно захватывать копию переменной внутри цикла:

for (int i = 0; i < 10; i++)
{
    int copy = i;
    actions.Add(() => Console.WriteLine(copy));
}

Тогда при вызове лямбд выведутся числа от 0 до 9.