Я наткнулся на эту статью и нашел ее очень интересной, поэтому провел несколько тестов самостоятельно:
Первый тест:
List actions = new List();
for (int i = 0; i < 5; ++i)
actions.Add(() => Console.WriteLine(i));
foreach (Action action in actions)
action();
Выходы:
5
5
5
5
5
Второй тест:
List actions = new List();
for (int i = 0; i < 5; ++i)
{
int j = i;
actions.Add(() => Console.WriteLine(j));
}
foreach (Action action in actions)
action();
Выходы:
0
1
2
3
4
Согласно статье, в Тесте One все лямбды содержат ссылку на i
, что приводит к их всем вывод 5. Означает ли это, что я получаю ожидаемые результаты во втором тесте, потому что новый int
создается для каждого лямбда-выражения?