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 RemoveAllqui prend un prédicat et ne réorganise le tableau interne qu'une seule fois, tandis Removequ'une Array.Copyopération est effectuée pour chaque élément que vous supprimez. RemoveAllest 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 Removeune 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.