Lösen Sie einfach das Problem der "Sammlung wurde geändert": Vermeiden Sie Listenmodifikationen im Zyklus
Im Programmierungsprozess, wenn die Erfassung geändert wurde; die Aufzählung kann möglicherweise nicht ausgeführt werden ", werden Programmierer häufig verwirrt, insbesondere wenn das Problem unter dem Debugger immer noch schwer zu erkennen ist. Machen Sie sich jedoch keine Sorge, die Lösung besteht darin, die potenziellen Listenänderungen im Fehlerzyklus zu verstehen.
Dieser Fehler tritt auf, wenn das Element in der Sammlung beim Kreissatz geändert wird. Im WCF -Server -Code -Fragment wird das "Subsidant" -Dictionary im Zyklus "foreach" der Methode "Notifysubscrements" geändert. Insbesondere wird dieser Fehler verursacht, wenn die Methode "Signaldata" indirekt geändert wird.
Um dieses Problem zu lösen, können wir die "tolist ()" -Methode verwenden, um den Wert des Wörterbuchs vor dem Zyklus in eine neue Liste umzuwandeln, wodurch die Falle der "modifizierten" vermieden wird. Dadurch wird eine separate Liste unabhängig vom ursprünglichen Wörterbuch erstellt, um sicherzustellen, dass sich Änderungen während des Zyklus nicht auf den iterativen Prozess auswirken.
Folgendes ist die Methode zum Anpassen des Code:
Durch die Verwendung dieser Technologie betreibt der Zyklus das ursprüngliche Wörterbuch nicht mehr, sondern eine unabhängige Kopie. Dies beseitigt die Möglichkeit einer gleichzeitigen Änderung und verhindert, dass der ärgerliche Fehler der "Sammlung geändert wurde".
<code class="language-c#">private static readonly IDictionary<Guid, Subscriber> subscribers = new Dictionary<Guid, Subscriber>(); ... public void NotifySubscribers(DataRecord sr) { foreach (Subscriber s in subscribers.Values.ToList()) // 将值复制到单独的列表中 { try { s.Callback.SignalData(sr); } catch ... } }</code>
Das obige ist der detaillierte Inhalt vonWie kann ich den Fehler 'Sammlung wurde geändert' bei der Iterien eines Wörterbuchs in C#beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!