Часто встречающейся проблема в C#, связанной с захватом переменной цикла в лямбда-выражении: Когда внутри цикла создаются лямбда-выражения, которые используют переменную цикла `i`, все эти лямбда-выражения не получают копию текущего значения `i` на каждой итерации. Вместо этого они захватывают саму переменную `i`, которая является одной и той же для всех лямбда-выражений. Это значит, что когда лямбда-выражения вызываются после завершения цикла, все они будут использовать последнее значение `i`, которое было в цикле после его завершения. ![[var actions.png|500]] Это противоречит интуитивному пониманию, что каждое лямбда-выражение должно использовать значение `i` на момент своего создания. Чтобы решить эту проблему, обычно создают копию переменной `i` внутри тела цикла: ```csharp for (int i = 0; i < 5; i++) { int copy = i; // Создаем копию для каждой итерации actions.Add(item => copy * 2); // Используем копию в лямбда-выражении } ``` Так каждое лямбда-выражение будет захватывать свою собственную копию `copy`, и вызов каждого делегата будет давать разное значение, соответствующее тому значению `i`, которое было при создании лямбда-выражения.