Loop-Wörterbuch
Benutze ich dieses:
foreach(KeyValuePair<String,String> entry in MyDic)
{
//do something with entry.Value or entry.Key
}
Das problem ist, dass ich kann nicht ändern Sie den Wert des Eintrags.Wert oder Eintrag.Schlüssel
Meine Frage ist, wie kann ich das ändern den Wert oder die-Taste, wenn die Schleife durch ein Wörterbuch?
Und, tut Wörterbuch ermöglichen dupliziert Schlüssel? Und wenn ja, wie können wir vermeiden ?
Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht ändern Sie den Wert eines dictionary-Eintrags beim Durchlaufen der Elemente im Wörterbuch, obwohl Sie ändern können, eine Eigenschaft auf den Wert, wenn es eine Instanz eines verweistyps.
Beispielsweise
Versuchen zu ändern, ein Wörterbuch (oder irgendeine Sammlung), während die Schleife durch seine Elemente, führt zu einem
InvalidOperationException
sagen: die Auflistung wurde geändert.Zur Beantwortung Ihrer spezifischen Fragen,
Der Ansatz für die beiden werden so ziemlich das gleiche. Sie können entweder die Loop-Schleife über eine Kopie des Wörterbuchs als Anthony Pengram sagte in seine Antwort, oder Sie können die Schleife einmal durch alle Elemente, um herauszufinden, welche Sie brauchen, um zu ändern und dann die Schleife wieder durch eine Liste derjenigen Elemente:
Einem Wörterbuch nicht erlaubt doppelte Schlüssel. Wenn Sie möchten, eine Sammlung von
<string, string>
Paare, die funktioniert, überprüfen Sie heraus NameValueCollection.foreach
ruft einen iterator hinter die kulissen und die Annahme ist, dass die Sammlung muss gleich bleiben. Es gibt eine Erklärung für das here. Anthony ' s Antwort wird funktionieren, weil es erstellt eine Kopie von Ihrem Wörterbuch, die Sie Durchlaufen und ändern Sie dann die original-Sammlung.Aktualisierung des Wörterbuchs in der Schleife ist ein problem, denn man kann es nicht ändern das Wörterbuch, wie es ist aufgezählt werden. Jedoch, Sie können arbeiten, um dieses ziemlich leicht durch die Umwandlung des Wörterbuchs eine Liste von
KeyValuePair<>
Objekte. Sie aufzählen, die Liste, und dann Sie können ändern Sie das Wörterbuch.Für den zweiten Teil, den Schlüssel in einem dictionary eindeutig sein muss.
using System.Linq;
- Anweisung, um Ihren code-Datei (auch vorausgesetzt, Sie haben einen Verweis in Ihr Projekt System.Core.dll,, auf den verwiesen wird standardmäßig in neue Projekte).KeyValuePair Schlüssel und Wert nur gelesen werden. Aber Sie können einen Wert ändern, wie, die:
Aber wenn Sie wollen, um den Schlüssel zu ändern, müssen Sie entfernen/hinzufügen-Taste.
Und Nein, ein Wörterbuch nicht erlaubt, doppelte Schlüssel, es löst eine ArgumentException aus.
Können Sie nicht ändern, die Tasten beim aufzählen Ihnen.
Eine Methode, die ich verwenden, um änderungen an der Sammlung beim aufzählen ist Ihnen, dass ich tun
break;
aus derforeach
- Schleife, wenn eine übereinstimmung gefunden wird und das Element geändert wird, und bin ein Neustart des gesamten enumeration alle immer wieder. Das ist eine Möglichkeit der Behandlung es...Nein, Wörterbuch nicht haben, können doppelte Schlüssel. Wenn Sie wollen etwas, das Sortieren von Schlüssel und erlauben Duplikate, sollten Sie einige andere Daten-Struktur.
Können Sie dies tun, wie
Wörterbuch und erlaubt keine Duplikate