en -preth discutant du problème de la capture des variables dans le cycle C #
En C #, les développeurs rencontrent un problème intéressant lors de l'utilisation de variables de capture dans l'itération du cycle. Considérez le fragment de code suivant:
Bien que la sortie attendue soit 0, 2, 4, 6 et 8, le code sortit de manière inattendue cinq 10. La raison de ce comportement est les variables capturées
<code class="language-csharp">List<Action> actions = new List<Action>(); int variable = 0; while (variable < 5) { actions.Add(() => Console.WriteLine(variable * 2)); ++variable; } foreach (var act in actions) { Console.WriteLine(act.Invoke()); }</code>
variable
Résoudre le problème des variables de capture variable
Afin de surmonter cette limite et de permettre à chaque opération d'avoir ses propres variables de capture, C # fournit une solution simple:
En créant une copie dudans le cycle, chaque opération capture ses propres exemples seuls, afin de s'assurer que
change en dehors de l'expression de Lambda n'affectera pas la valeur de capture.<code class="language-csharp">while (variable < 5) { int copy = variable; actions.Add(() => Console.WriteLine(copy * 2)); ++variable; }</code>
Autres situations communes variable
variable
et itération:
Dans ces deux cas, la copie locale de la variable est nécessaire pour capturer l'itération du cycle actuel. for
foreach
Conclusion
<code class="language-csharp">// For loop for (int i = 0; i < 5; i++) { // ... similar issue ... } // Foreach loop // ... similar issue ...</code>
Comprendre le comportement de la capture des variables dans le cycle C # est essentiel pour éviter les accidents. La solution discutée dans cet article garantit que chaque opération a ses propres variables de capture indépendantes, atteignant ainsi des comportements prévisibles et attendus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!