странное лямбда-поведение

Я наткнулся на эту статью и нашел ее очень интересной, поэтому провел несколько тестов самостоятельно:

Первый тест:

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 создается для каждого лямбда-выражения?

11
задан tbridge 14 November 2011 в 02:39
поделиться