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: 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.