List <T>是否保证项目将按照他们添加的顺序返回?

List<T>是否总是保证项目将按枚举时添加的顺序返回?

更新 :谢谢所有答案的人,让我放心。 我用.NET Reflector(应该可能已经做到了这一点),并且实际上底层存储是一个TT[] )的数组。

该列表是基于索引的,并且新项目将总是被添加到列表的末尾。 您可以插入项目在一个特定的索引,所以下一个项目将移动一个位置。

所以是的 ,你可以这样安全地使用它…

List(T)类是ArrayList类的通用等效物。 它使用大小根据需要dynamic增加的数组实现IList(T)通用接口。

可以使用整数索引访问此集合中的元素。 这个集合中的索引是从零开始的。

列表(T)不保证sorting。 在执行需要对List(T)进行sorting的操作(如BinarySearch)之前,必须对List(T)进行sorting。

列表(T)可以同时支持多个阅读器,只要该集合没有被修改。 枚举枚举本质上不是一个线程安全的过程。 在枚举与一个或多个写入访问竞争的罕见情况下,确保线程安全的唯一方法是在整个枚举期间locking集合。 为了让集合可以被多个线程读取和写入,您必须实现自己的同步。

你可以在MSDN上阅读更多关于它的信息。

是的, List<T>保证了插入顺序和检索顺序 ,这是logging在MSDN(下面强调是我的)。

插入

List<T>.Add方法

将一个对象添加到List<T>末尾

项目参数是:

要添加到List<T>结尾的对象。

List<T>.AddRange方法

将指定集合的​​元素添加到List<T>末尾

收集参数是:

其元素应添加到List<T>末尾的集合。

恢复

List<T>.Enumerator结构

最初,枚举器位于集合中的第一个元素之前。 在这个位置, Current是不确定的。 因此,在读取Current值之前,必须调用MoveNext将枚举器推进到集合第一个元素

Current直到MoveNext返回相同的对象。 MoveNextCurrent设置为下一个元素

是。 但这不是规范的一部分。

Ref: List Class

是根据这个MSDN论坛主题