2017-02-16 4 views
-1

Ich habe eine Liste in eine Foreach-Schleife übergeben, die 0 oder mehr Elemente aus der Liste entfernt. Aufgrund von Bedingungen ist es möglich, dass die Liste vollständig geleert wird, was einen Null-Referenzfehler verursacht. Was ist der beste Weg, um mit dieser Art von Situation umzugehen?Objekt in Foreach-Schleife geleert

foreach (Item i in items) 
{ 
    if (i.property == condition) 
    { 
     items.Remove(i); 
    } 
} 
+0

Sie nicht Reihenfolge ändern können, die Sie aufzählt. Wie haben Sie es geschafft, die Artikelliste vollständig zu leeren? –

+0

Ich kann mir keine Sprache vorstellen, die ich kenne, die richtig funktioniert, wenn Sie versuchen, Elemente aus etwas zu entfernen, über das Sie iterieren. Es gibt jedoch viele Möglichkeiten, dies zu tun, von 'items.RemoveAll' bis hin zum Klonen der Liste, zum Iterieren über eine und zum Entfernen von der anderen, zum Speichern der Indizes und zum Entfernen der Elemente nach der Schleife. – Andrew

Antwort

1

Verwenden List.RemoveAll Methode

items.RemoveAll(i => i.property == condition) 

Es entfernt alle Elemente, die die Bedingungen von der angegebenen Prädikats definiert entsprechen.

Sie können auch unangetastet ursprünglichen Liste (oder eine andere Sammlung) verlassen durch neue Liste erstellen, ohne Gegenstände, die Paßgenauigkeitsbedingung (manchmal, die nützlich sein könnten)

var newItems = items.Where(i => i.property != condition).ToList(); 
Verwandte Themen