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 :
No answers yet.
Connectez-vous pour laisser une réponse