Duplizieren Sie
Ändern einer Sammlung beim Iterieren durch die Sammlung
Hat jemand ein nettes Muster, damit ich um die Unfähigkeit, Objekte zu entfernen, während ich Schleife durch eine aufzählbare Sammlung (z. B. eine IList oder KeyValuePairs in einem Wörterbuch) erhalten
Das folgende Beispiel schlägt fehl, da es die Liste, die während der foreach-Aufzählung aufgezählt wird, modifiziert
foreach (MyObject myObject in MyListOfMyObjects)
{
if (condition) MyListOfMyObjects.Remove(myObject);
}
In der Vergangenheit habe ich zwei Methoden angewandt.
Ich habe die foreach-Schleife durch eine umgekehrte for-Schleife ersetzt (um die Indizes nicht zu ändern, über die ich eine Schleife mache, wenn ich ein Objekt entferne).
Ich habe auch versucht, eine neue Sammlung von Objekten zu speichern, die innerhalb der Schleife zu entfernen sind, und dann eine Schleife durch diese Sammlung zu ziehen und die Objekte aus der ursprünglichen Sammlung zu entfernen.
Diese funktionieren gut, aber weder fühlt sich schön, und ich habe mich gefragt, ob jemand eine bessere Lösung gefunden hat. elegant Lösung des Problems
0 Stimmen
Ich scheine meinen eigenen Beitrag nicht schließen zu können, da SO denkt, dass ich versuche, über ihn abzustimmen. Ich freue mich, wenn das jemand anderes tut.
0 Stimmen
Das ist kein Problem. Ich verbringe mehrere Minuten damit, SO zu suchen, bevor ich eine Frage stelle. An die ursprüngliche Frage erinnere ich mich, aber sie war nicht sehr gut betitelt. Ich habe sie bearbeitet, so dass sie in Zukunft leichter zu finden sein sollte: Wie ändert oder löscht man Elemente aus einer aufzählbaren Sammlung, während man sie in C# durchläuft?