Últimamente, he estado escribiendo un montón de código que tiene este aspecto:¿La eliminación de elementos de una lista de C# <T> retiene los pedidos de otros artículos?
List<MyObject> myList = new List<MyObject>();
...
for(int i = 0; i < myList.Count; ++i)
{
if(/*myList[i] meets removal criteria*/)
{
myList.RemoveAt(i);
--i; //Check this index again for the next item
//Do other stuff as well
}
}
y yo acabo de ser un poco paranoico que tal lista no retiene el orden de los objetos en la eliminación. No sé la especificación de C# lo suficientemente bien como para saberlo con certeza. ¿Alguien puede verificar que estoy o no estoy buscando problemas con este patrón?
EDITAR: Tal vez debería aclarar que lo anterior es un ejemplo muy simplificado y que suceden más cosas si el artículo necesita ser eliminado, así que no creo que List<T>.RemoveAll()
sea terriblemente aplicable aquí. Aunque es una buena función. He agregado un comentario en el bloque anterior if()
para mencionarlo específicamente.
Sólo una nota al margen: debe recorrer la lista hacia atrás en lugar de hacia adelante. Digamos que eliminas la lista [1] (i = 1). Esto hará que la lista cambie, donde el elemento en la lista [2] ahora está en la lista [1]. Ahora cuando saltas a i = 2, te saltaste el elemento que ahora está en la lista [1]. –
Debería poder simplificar enormemente este patrón con el método RemoveAll() –
¿Por qué no usa linq para eso? – Andre