Avatar ·

Pourquoi la variable de boucle foreach est-elle capturée par référence dans une expression lambda en C# ?

Bonjour à tous ! Je suis un développeur C# débutant et j'ai rencontré un comportement très étrange en utilisant foreach avec des expressions lambda. J'ai ce code : ```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(); } ``` Je m'attendais à ce que la console affiche : ``` 1 2 3 4 5 ``` Mais au lieu de cela, je vois : ``` 5 5 5 5 5 ``` Pourquoi cela se produit-il ? J'ai lu que cela est lié à la façon dont C# traite la variable de boucle dans foreach. Mais je ne comprends pas pourquoi elle se comporte comme "une seule et même" variable à chaque itération, au lieu d'être créée à nouveau. Dans une boucle for, autant que je sache, tout fonctionne normalement. Quelqu'un pourrait-il expliquer ce qui se passe ? Et surtout, comment corriger ce code pour obtenir le résultat attendu ? Merci d'avance ! <<>>

Cause du problème :