Heim > Backend-Entwicklung > C++ > Warum führen C# -Schleifen mit erfassten Variablen unerwartete Ergebnisse?

Warum führen C# -Schleifen mit erfassten Variablen unerwartete Ergebnisse?

Mary-Kate Olsen
Freigeben: 2025-02-03 08:20:10
Original
211 Leute haben es durchsucht

Why Do C# Loops with Captured Variables Produce Unexpected Results?

In -tpth diskutieren das Problem der Erfassung von Variablen im C# -Zyklus

In C#stoßen Entwickler auf ein interessantes Problem bei der Verwendung von Erfassungsvariablen in der Zyklus -Iteration. Betrachten Sie das folgende Codefragment:

Obwohl die erwartete Ausgabe 0, 2, 4, 6 und 8 beträgt, ist der Code unerwartet fünf 10. Der Grund für dieses Verhalten sind die erfassten Variablen
<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>
Nach dem Login kopieren
. Alle Operationen zitieren dieselben Beispiele für .

variable Lösen Sie das Problem der Erfassungsvariablen variable

Um diese Grenze zu überwinden und jedem Vorgang ihre eigenen Erfassungsvariablen zu haben, bietet C# eine einfache Lösung:

Durch das Erstellen einer Kopie des

im Zyklus erfasst jede Operation ihre eigenen alleinigen Beispiele, um sicherzustellen, dass

sich außerhalb des Lambda -Ausdrucks den Erfassungswert nicht beeinflusst.
<code class="language-csharp">while (variable < 5)
{
    int copy = variable;
    actions.Add(() => Console.WriteLine(copy * 2));
    ++variable;
}</code>
Nach dem Login kopieren

Andere gemeinsame Situationen variable variable

Dieses Problem kann auch in anderen Szenarien auftreten, die Variablen im Zyklus umfassen, wie z. B.

und Iteration:

In diesen beiden Fällen ist die lokale Kopie der Variablen erforderlich, um die aktuelle Zyklus -Iteration zu erfassen. for foreach Schlussfolgerung

<code class="language-csharp">// For loop
for (int i = 0; i < 5; i++)
{
    // ... similar issue ...
}

// Foreach loop
// ... similar issue ...</code>
Nach dem Login kopieren

Das Verhalten des Verhaltens der Erfassung von Variablen im C# -Zyklus ist wichtig, um Unfälle zu vermeiden. Die in diesem Artikel diskutierte Lösung stellt sicher, dass jede Operation über eigene unabhängige Erfassungsvariablen verfügt, wodurch vorhersehbare und erwartete Verhaltensweisen erreicht werden.

Das obige ist der detaillierte Inhalt vonWarum führen C# -Schleifen mit erfassten Variablen unerwartete Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage