Heim >Backend-Entwicklung >C++ >Warum werfen mein 'foreach' -Loop eine 'Sammlung geändert; Aufzählungsoperation kann möglicherweise keinen Fehler ausführen?
Der Fehler "Die Sammlung wurde geändert; Aufzählungsoperation kann möglicherweise nicht ausgeführt" erscheint ", wenn ein foreach
-Sloop über eine Sammlung iteriert, die während der Ausführung der Schleife geändert wird. Dies geschieht häufig beim Hinzufügen oder Entfernen von Elementen aus der Sammlung innerhalb der Schleife selbst oder aus einem anderen Thread.
Das angegebene Beispiel zeigt diesen Fehler in einer NotifySubscribers()
-Methode, die durch ein subscribers
Wörterbuch iteriert wird. Das Problem beruht auf der SignalData
-Methode, die das subscribers
-Dictionary indirekt ändern kann, während NotifySubscribers()
ausgeführt wird. Dies kann passieren, wenn SignalData
Abonnenten oder Umzüge auslöst.
Die Lösung besteht darin, eine Kopie der Sammlung vor in die Schleife zu erstellen. Dies verhindert die Änderung der ursprünglichen Sammlung, die die Iteration der Schleife beeinflusst:
<code class="language-csharp">foreach (Subscriber s in subscribers.Values.ToList()) { // Notify subscriber s }</code>
Verwenden ToList()
erstellt eine neue Liste mit einem Schnappschuss des subscribers.Values
. Die foreach
-Schleife betreibt nun mit dieser unabhängigen Kopie und stellt sicher, dass Änderungen an dem ursprünglichen subscribers
Wörterbuch den Fehler nicht verursachen. Dies garantiert sichere und zuverlässige Aufzählung.
Das obige ist der detaillierte Inhalt vonWarum werfen mein 'foreach' -Loop eine 'Sammlung geändert; Aufzählungsoperation kann möglicherweise keinen Fehler ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!