Wählen Sie die gewünschten Elemente aus , anstatt zu versuchen, die nicht gewünschten Elemente zu entfernen . Dies ist so viel einfacher (und im Allgemeinen auch effizienter) als das Entfernen von Elementen.
var newSequence = (from el in list
where el.Something || el.AnotherThing < 0
select el);
Ich wollte dies als Kommentar als Antwort auf den Kommentar von Michael Dillon unten posten, aber es ist zu lang und wahrscheinlich nützlich, um es trotzdem in meiner Antwort zu haben:
Persönlich würde ich niemals Elemente einzeln entfernen, wenn Sie sie entfernen müssen, und dann einen Aufruf aufrufen, RemoveAll
der ein Prädikat verwendet und das interne Array nur einmal neu anordnet, während für jedes Element, das Sie entfernen, Remove
eine Array.Copy
Operation ausgeführt wird. RemoveAll
ist weitaus effizienter.
Und wenn Sie eine Liste rückwärts durchlaufen, haben Sie bereits den Index des Elements, das Sie entfernen möchten, sodass das Aufrufen weitaus effizienter ist RemoveAt
, da Remove
zuerst die Liste durchlaufen wird, um den Index des Elements zu finden, das Sie verwenden Ich versuche zu entfernen, aber Sie kennen diesen Index bereits.
Alles in allem sehe ich keinen Grund, jemals Remove
eine for-Schleife aufzurufen . Und wenn es überhaupt möglich ist, verwenden Sie im Idealfall den obigen Code, um Elemente aus der Liste nach Bedarf zu streamen, sodass überhaupt keine zweite Datenstruktur erstellt werden muss.