¿Una lista garantiza que los artículos serán devueltos en el orden en que fueron agregados?

¿Una List siempre garantiza que los artículos serán devueltos en el orden en que se agregaron cuando se enumeraron?

Actualizado : Gracias por todas las respuestas, tranquiliza mi mente. Hice una rápida búsqueda de la clase List con .NET Reflector (probablemente debería haberlo hecho en primer lugar) y, de hecho, la tienda subyacente es una matriz de T ( T[] ).

La lista está basada en un índice y siempre se agregarán nuevos elementos al final de la lista. Puede insertar elementos en un índice determinado para que los siguientes elementos se muevan una posición.

Entonces , puedes usarlo de forma segura de esa manera …

La clase List (T) es el equivalente genérico de la clase ArrayList. Implementa la interfaz genérica IList (T) usando una matriz cuyo tamaño se incrementa dinámicamente según sea necesario.

Se puede acceder a los elementos en esta colección usando un índice entero. Los índices en esta colección están basados ​​en cero.

No se garantiza que la Lista (T) esté ordenada. Debe ordenar la Lista (T) antes de realizar operaciones (como BinarySearch) que requieren que se ordene la Lista (T).

Una lista (T) puede admitir varios lectores al mismo tiempo, siempre que la colección no se modifique. Enumerar a través de una colección no es intrínsecamente un procedimiento seguro para subprocesos. En el raro caso en que una enumeración contenga uno o más accesos de escritura, la única forma de garantizar la seguridad de la secuencia es bloquear la colección durante toda la enumeración. Para permitir que la colección sea accedida por múltiples hilos para lectura y escritura, debe implementar su propia sincronización.

Puede leer más sobre esto en MSDN .

Sí, List garantiza el orden de inserción y el orden de recuperación, y esto está documentado en MSDN (el énfasis a continuación es mío).

Inserción

List.Add método List.Add

Agrega un objeto al final de la List .

El parámetro del artículo es:

El objeto que se agregará al final de la List .

List.AddRange Method

Agrega los elementos de la colección especificada al final de la List .

El parámetro de recostackción es:

La colección cuyos elementos deben agregarse al final de la List .

Recuperación

List.Enumerator Estructura del List.Enumerator

Inicialmente, el enumerador se posiciona antes del primer elemento en la colección. En esta posición, Current no está definido. Por lo tanto, debe llamar a MoveNext para avanzar al enumerador al primer elemento de la colección antes de leer el valor de Current .

Current devuelve el mismo objeto hasta que se llame a MoveNext . MoveNext establece Current para el siguiente elemento .

Sí. Pero no es parte de la especificación.

Ref: List Class

Sí, según este hilo del foro de MSDN