Seleccione los elementos que no desea en lugar de tratar de eliminar los elementos que no desee. Esto es mucho más fácil (y generalmente más eficiente también) que eliminar elementos.
var newSequence = (from el in list
where el.Something || el.AnotherThing < 0
select el);
Quería publicar esto como un comentario en respuesta al comentario dejado por Michael Dillon a continuación, pero de todos modos es demasiado largo y probablemente útil para tener en mi respuesta:
Personalmente, nunca eliminaría los elementos uno por uno, si necesita eliminarlos, llame a RemoveAll
que toma un predicado y solo reorganiza la matriz interna una vez, mientras que Remove
realiza una Array.Copy
operación para cada elemento que elimina. RemoveAll
Es mucho más eficiente.
Y cuando está iterando hacia atrás sobre una lista, ya tiene el índice del elemento que desea eliminar, por lo que sería mucho más eficiente llamar RemoveAt
, porque Remove
primero hace un recorrido de la lista para encontrar el índice del elemento que desea está intentando eliminar, pero ya conoce ese índice.
En general, no veo ninguna razón para llamar Remove
a un bucle for. E idealmente, si es posible, use el código anterior para transmitir elementos de la lista según sea necesario para que no se tenga que crear una segunda estructura de datos.