Avatar ·

¿Por qué en C# la variable del bucle foreach se captura por referencia en una expresión lambda?

¡Hola a todos! Soy un desarrollador principiante de C# y me encontré con un comportamiento muy extraño al usar foreach junto con expresiones lambda. Tengo este código: ```csharp var actions = new List(); var numbers = new List { 1, 2, 3, 4, 5 }; foreach (var number in numbers) { actions.Add(() => Console.WriteLine(number)); } foreach (var action in actions) { action(); } ``` Esperaba que en la consola se imprimiera: ``` 1 2 3 4 5 ``` Pero en cambio veo: ``` 5 5 5 5 5 ``` ¿Por qué sucede esto? He leído que está relacionado con cómo C# maneja la variable del bucle en foreach. Pero no entiendo por qué se comporta como "la misma" variable en cada iteración, en lugar de crearse de nuevo. En el bucle for, hasta donde sé, todo funciona normalmente. ¿Alguien podría explicar de qué se trata? Y lo más importante: ¿cómo corregir este código para obtener el resultado esperado? ¡Gracias de antemano! <<>>

Razón del problema: