Przechwytywanie zmiennej Lambda w pętli - co tu się dzieje?

Próbuję się rozejrzeć, co tu się dzieje? Jaki kod tworzy kompilator?

public static void vc()
{
    var listActions = new List<Action>();

    foreach (int i in Enumerable.Range(1, 10))
    {
        listActions.Add(() => Console.WriteLine(i));
    }

    foreach (Action action in listActions)
    {
        action();
    }
}

static void Main(string[] args)
{ 
  vc();
}

wydajność: 10 10 .. 10

Wedługto, nowa instancja ActionHelper zostanie utworzona dla każdej iteracji. Więc w takim przypadku zakładam, że powinien wydrukować 1..10. Czy ktoś może mi podać pseudo kod tego, co kompilator robi tutaj?

Dzięki.

questionAnswers(3)

yourAnswerToTheQuestion