effizientes Entfernen von Elementen aus einer C# -Liste während der Iteration
Ändern einer Liste beim Iterieren mit Standardmethoden führt häufig zu InvalidOperationException
Fehler. In diesem Artikel werden saubere Lösungen vorgestellt, um Elemente aus einem List<T>
basierend auf einer Bedingung sicher zu entfernen.
Das gemeinsame Problem ergibt sich bei der Verwendung List<T>.Remove()
oder List<T>.RemoveAt()
in einer foreach
-Schleife oder einer Standard for
. Indexwechsel verursacht Probleme.
Lösung 1: Reverse Iteration
nach hinten unter Verwendung einer for
-Schleife vermieden Indexprobleme:
<code class="language-csharp">var list = new List<int>(Enumerable.Range(1, 10)); for (int i = list.Count - 1; i >= 0; i--) { if (list[i] > 5) { list.RemoveAt(i); } } list.ForEach(i => Console.WriteLine(i));</code>
Diese Methode beginnt am Ende und entzieht Elemente, ohne nachfolgende Indizes zu beeinflussen.
Lösung 2: RemoveAll()
Methode
ein prägnanterer und lesbarerer Ansatz ist die Verwendung der RemoveAll()
-Methode mit einem Prädikat:
<code class="language-csharp">var list = new List<int>(Enumerable.Range(1, 10)); Console.WriteLine("Before:"); list.ForEach(i => Console.WriteLine(i)); list.RemoveAll(i => i > 5); Console.WriteLine("After:"); list.ForEach(i => Console.WriteLine(i));</code>
Dies entfernt elegant alle Elemente, die die angegebene Bedingung erfüllen (i > 5
in diesem Fall). Es wird im Allgemeinen für seine Klarheit und Effizienz bevorzugt.
Beide Methoden bieten zuverlässige Möglichkeiten, Elemente während der Iteration aus einer Liste zu entfernen, Ausnahmen zu verhindern und die Datenintegrität sicherzustellen. Die RemoveAll()
-Methode ist häufig die bevorzugte Wahl für die Einfachheit und Lesbarkeit.
Das obige ist der detaillierte Inhalt vonWie kann ich Elemente während der Iteration in C#sicher aus einer Liste entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!