Ändern .NET-Wörterbuch während der Aufzählung durch
Ich bin mit einem Wörterbuch und ich will es ändern, während ich Durchlaufen, aber es scheint, dies ist nicht erlaubt.
Wie kann ich dies tun?
Dank
- Wollen Sie den Schlüssel ändern oder den Wert?
- Sie würde nicht wollen, um den Wiederaufbau einer Brücke, während Sie auf ihn, ja? Sie vielleicht umsetzen wollen, in einer anderen Weise.
- Ob Sie es glauben oder nicht, aber das ist, wie riesige Brücken gebaut und modifiziert/repariert. Und wenn ich eine riesige Wörterbuch und ändern müssen, jeder Wert, ich möchte lieber nicht-Klon der Schlüssel zuerst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Speichern Sie den Schlüssel oder das Objekt, das Sie löschen möchten, und brechen die Schleife, und dann verwenden Sie die Methode zum löschen des Objekts aus dem Wörterbuch.
Hoffe, das hilft
Nicht, im Grunde. Es ist explizit nicht unterstützt. Aus der docs für
Dictionary<,>.GetEnumerator()
:In der Regel der beste Weg ist, zu erinnern, die änderungen, die Sie vornehmen möchten, und führen Sie Sie anschließend. Oder Sie könnten sich eine Kopie des Wörterbuchs, mit zu beginnen und dann Durchlaufen , dass, während Sie ändern den ursprünglichen. Wenn Sie ihm geben könnte uns mehr Informationen über das, was Sie zu tun versuchen, das würde helfen.
Nachdem dies gesagt ist, die neue
Z. B. concurrentdictionary
Klasse .NET 4.0 hat dies zulassen - aber die Ergebnisse der iteration nicht garantiert - Sie können die änderungen sehen, während Sie Durchlaufen, oder Sie können es nicht.Ich antwortete, es hier mit Bezug auf die Warteschlange, aber die Antwort ist die gleiche. Man kann nicht aufzählen, mit foreach und ändern Sie die Erhebung zur gleichen Zeit.
Lief ich in eine ähnliche situation auf der Arbeit. Ich brauchte, um zu ändern, ein Wörterbuch, während iterativ, so dass es kleiner, bis ich nicht über die Schlüssel/Werte Links.
Ich gestartet, durch das erstellen einer Liste "entfernt zu werden" - Tasten, aber es war quälend langsam mit all den anderen Logik, die ich umzusetzen hatte. Alternativ, landete ich Durchlaufen Wörterbuch nach hinten. Da Sie durchqueren das Wörterbuch von hinten nach vorne, wird die iteration wird nicht werfen einen Fehler.
Nachdem ich meine Arbeit bezogene Logik, es sieht albern, aber ich verspreche, es funktioniert und sieht etwa so aus: