Captura de la variable Lambda en bucle - ¿qué pasa aquí?

Estoy tratando de mover la cabeza, ¿qué pasa aquí? ¿Qué tipo de código produce el compilador?

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

salida: 10 10 .. 10

De acuerdo aesta, se crearía una nueva instancia de ActionHelper para cada iteración. Entonces, en ese caso, asumo que debería imprimir 1..10. ¿Alguien me puede dar algún pseudo código de lo que el compilador está haciendo aquí?

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta