Heim >Backend-Entwicklung >C++ >Wie kann ich den Fehler 'Sammlung wurde geändert' bei der Iterien eines Wörterbuchs in C#beheben?

Wie kann ich den Fehler 'Sammlung wurde geändert' bei der Iterien eines Wörterbuchs in C#beheben?

Susan Sarandon
Susan SarandonOriginal
2025-02-02 03:41:09941Durchsuche

How to Resolve the

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!

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