почему эта программа на C # выводит такой результат? Как понять замыкание?

Я пытался понять ответ на этот вопрос Почему я получаю неправильные результаты при вызове Func ? Я написал образец код. Следующий код

public static void Main(string[] args)
{
    var funcs = new List>();
    for(int v=0,i=0;v<3;v++,i++)
    {
        funcs.Add( new Func(delegate(){return "Hello "+ i++ +" "+v;}) );
    }
    foreach(var f in funcs)
        Console.WriteLine(f());
}

производит

Hello 3 3
Hello 4 3
Hello 5 3

После прочтения объяснения Джона Скита и Эрика Липперта я подумал, что получу

Hello 3 3
Hello 3 3
Hello 3 3

Здесь и v, и i - переменные цикла, а значение i, полученное в тот момент, v равно не почему это ?. Я не понимаю этого поведения.

5
задан Community 23 May 2017 в 12:19
поделиться