Heim > Backend-Entwicklung > C++ > Warum verursacht C#'forach` Loop Variable Wiederverwendung Probleme mit Schließungen?

Warum verursacht C#'forach` Loop Variable Wiederverwendung Probleme mit Schließungen?

Mary-Kate Olsen
Freigeben: 2025-01-31 21:11:11
Original
517 Leute haben es durchsucht

Why Does C#'s `foreach` Loop Variable Reuse Cause Problems with Closures?

c#

Wiederverwendung von Zyklusvariablen: eine unnötige Falle foreach Bei Verwendung des Lambda -Ausdrucks oder einer anonymen Methode in C#kann ein modifizierter Verschlusszugriff angezeigt werden.

Die Wiederverwendung von Variablen im Zyklus hat dieses Problem verschärft.

foreach Der Compiler deklariert normalerweise die Zyklusvariable außerhalb des Zykluskörpers, wie im modifizierten Verschlussbeispiel gezeigt:

Dies unterscheidet sich von den Erwartungen an deklarierte Variablen im Zyklus:
string s;
while (enumerator.MoveNext())
{
   s = enumerator.Current;
   ...
}
Nach dem Login kopieren

Die externe variable Anweisung hat das Problem der modifizierten Verschlusszugriffsprobleme verschärft, da sie einen längeren Bereich für Variablen erzeugt. Die im Zyklus <环> deklarierten Variablen können nicht außerhalb des Zyklus zugegriffen werden.
while (enumerator.MoveNext())
{
   string s;
   s = enumerator.Current;
   ...
}
Nach dem Login kopieren

Der Compiler beschließt, die kreisförmige Variable vor der Einführung des Lambda -Ausdrucks und der anonymen Methode wiederzuverwenden. Daher gab es keine mögliche Falle, dass die variable Wiederverwendung zu diesem Zeitpunkt vollständig berücksichtigt wurde. foreach

In C# 5 wird dieser Entwurfsfehler durch eine große Änderung gelöst. Die kreisförmige Variable befindet sich logisch im Zykluskörper, um sicherzustellen, dass jeder Verschluss eine neue Kopie erhält. Diese Änderung beseitigt die Schließfalle des modifizierten -Zyklus.

Obwohl diese Reparatur eine beliebte Verbesserung ist, muss sie bei der Verwendung der alten Version der alten Version diese Reparatur nicht unterstützt, aber sie muss noch auf dieses Problem achten.

Das obige ist der detaillierte Inhalt vonWarum verursacht C#'forach` Loop Variable Wiederverwendung Probleme mit Schließungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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