Heim > Backend-Entwicklung > C++ > Warum verursacht C# foreach Loop -Variable Wiederverwendung 'Zugriff auf geänderte Schließung' Probleme?

Warum verursacht C# foreach Loop -Variable Wiederverwendung 'Zugriff auf geänderte Schließung' Probleme?

Linda Hamilton
Freigeben: 2025-01-31 21:16:10
Original
585 Leute haben es durchsucht

Why Does C# Foreach Loop Variable Reuse Cause

c# foreach Schleifenvariable Wiederverwendung: Probleme und Lösungen

c# Lambda -Ausdrücke und anonyme Methoden führen das Problem "modifizierter Verschluss" innerhalb von foreach Loops ein. Betrachten Sie dieses Beispiel:

<code class="language-csharp">foreach (var s in strings)
{
   query = query.Where(i => i.Prop == s); // Modified closure issue
   ...
}</code>
Nach dem Login kopieren

Der generierte Code des Compilers zeigt das Stamm des Problems an:

<code class="language-csharp">string s;
while (enumerator.MoveNext())
{
   s = enumerator.Current;
   ...
}</code>
Nach dem Login kopieren

Die s Variable wird außerhalb der Schleife deklariert. Dieses Design schien anfangs anscheinend zu Problemen zu Problemen zu sehen. Es bietet keinen Leistungsvorteil und beschränkt die variable Verwendung außerhalb der Schleife.

Warum dieses Design?

Diese Variable -Wiederverwendung war eine Designauswahl in früher C# (1.0). Der Unterschied zwischen einer inneren und äußeren Variablen wurde als unbedeutend eingestuft. Die Verschlusssemantik von C# 2.0 veränderte dies jedoch. Aufrechterhaltung der Konsistenz mit for Schleifen wurde die Schleifenvariable nach draußen platziert.

Änderungen in C# 5 und später

Erkennen der Fehler, C# 5 führte eine Breaking -Änderung ein: Die Variable foreach Schleife ist jetzt logisch in den Körper der Schleife. Jede Iteration erhält eine frische Kopie.

Dies löst das Problem "modifizierter Verschluss", wodurch die ältere Methode unsicher wird. Es zeigt auch die Bedeutung der sorgfältigen var -Stywordsverwendung, insbesondere bei Lambdas oder anonymen Methoden in foreach Loops.

Das obige ist der detaillierte Inhalt vonWarum verursacht C# foreach Loop -Variable Wiederverwendung 'Zugriff auf geänderte Schließung' Probleme?. 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