Captura de variável lambda em loop - o que acontece aqui?

Eu estou tentando entender, o que acontece aqui? Que tipo de código o compilador produz?

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();
}

saída:&nbsp;10 10 .. 10

De acordo comisto, uma nova instância do ActionHelper seria criada para cada iteração. Então, nesse caso, eu diria que deveria imprimir 1..10. Alguém pode me dar algum código pseudo do que o compilador está fazendo aqui?

Obrigado.