Heim >Backend-Entwicklung >C++ >Warum erfassen C# Loop -Aktionen dieselbe Variable und wie kann dies vermieden werden?
Die Variablen in der Zykluserfassung
In C#achten Sie beim Definieren der Operation im Zyklus unbedingt auf das Verhalten der variablen Erfassung. Standardmäßig erfassen alle Vorgänge dieselbe Variable, wodurch die Ausgabeergebnisse bei der Aufruf nicht den Erwartungen entsprechen.
Bitte betrachten Sie das folgende Beispiel:
Die erwartete Ausgabe dieses Codes beträgt 0, 2, 4, 6 und 8. Die tatsächliche Ausgabe beträgt jedoch fünf 10. Dies liegt daran, dass alle Operationen dieselbe erfasste Variable
<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) { act.Invoke(); }</code>zitieren, was im Zyklus aktualisiert wird. Bei der Anrufung haben alle Operationen den gleichen Wert 10.
variable
Um dieses Problem zu vermeiden und sicherzustellen, dass jede Operationsinstanz eine eigene Erfassungsvariable hat, müssen Sie die Variable im Zyklus kopieren:
Durch die lokale Kopie der Variablen erfasst jeder Operation seinen eigenen eindeutigen Wert, um die erwartete Ausgabe 0, 2, 4, 6, 8 zu erhalten.
<code class="language-csharp">while (variable < 5) { int copy = variable; actions.Add(() => Console.WriteLine(copy * 2)); ++variable; }</code>
Das Konzept dieser variablen Erfassung ist entscheidend, um den Verschluss von C#zu verstehen. Berücksichtigen Sie beim Definieren von Operationen innerhalb des Zyklus den Lebenszyklus der Variablen und ihrer Zugänglichkeit.
Das obige ist der detaillierte Inhalt vonWarum erfassen C# Loop -Aktionen dieselbe Variable und wie kann dies vermieden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!