Я наткнулся на эту статью и нашел, что это очень интересно, поэтому я провел несколько тестов самостоятельно:
Test One:
List<Action> actions = new List<Action>();
for (int i = 0; i < 5; ++i)
actions.Add(() => Console.WriteLine(i));
foreach (Action action in actions)
action();
Выходы:
5
5
5
5
5
Test Two:
List<Action> actions = new List<Action>();
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
Согласно статье, в Test One все лямбды содержат ссылку на i
, которая выводит их на все выходные 5. Означает ли это, что я получаю ожидаемые результаты в Test Two, потому что создается новый int
для каждое лямбда-выражение?