Sélectionnez les éléments que vous ne voulez plutôt que d' essayer de supprimer les éléments que vous ne voulez. C'est tellement plus facile (et généralement plus efficace aussi) que de supprimer des éléments.
var newSequence = (from el in list
where el.Something || el.AnotherThing < 0
select el);
Je voulais poster ceci en tant que commentaire en réponse au commentaire laissé par Michael Dillon ci-dessous, mais c'est trop long et probablement utile d'avoir dans ma réponse quand même:
Personnellement, je ne supprimerais jamais les éléments un par un, si vous en avez besoin, appelez alors RemoveAll
qui prend un prédicat et ne réorganise le tableau interne qu'une seule fois, tandis Remove
qu'une Array.Copy
opération est effectuée pour chaque élément que vous supprimez. RemoveAll
est beaucoup plus efficace.
Et lorsque vous parcourez une liste en arrière, vous avez déjà l'index de l'élément que vous souhaitez supprimer, il serait donc beaucoup plus efficace d'appeler RemoveAt
, carRemove
commence par parcourir la liste pour trouver l'index de l'élément que vous essayez de supprimer, mais vous connaissez déjà cet index.
Donc, dans l'ensemble, je ne vois aucune raison d'appeler Remove
une boucle for. Et idéalement, si cela est possible, utilisez le code ci-dessus pour diffuser des éléments de la liste selon les besoins afin qu'aucune seconde structure de données ne soit créée du tout.