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
Mary-Kate OlsenOriginal
2025-02-03 08:20:10248Durchsuche

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>
. 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>

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>

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!

Stellungnahme:
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