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

Kev*_*Kev 71 .net collections list

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

更新:感谢所有人的回答,让我放心.我List<T>用.NET Reflector快速戳了一下这个类(应该首先应该这样做),实际上底层存储是T(T[])的数组.

San*_*uys 58

List是基于索引的,并且新项目将始终添加到列表的末尾.您可以在某个索引处插入项目,以便下一个项目移动一个位置.

所以是的,你可以安全地使用它...

List(T)类是ArrayList类的通用等价物.它使用一个数组实现IList(T)泛型接口,该数组的大小根据需要动态增加.

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

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

List(T)可以同时支持多个读取器,只要不修改集合即可.枚举通过集合本质上不是线程安全的过程.在枚举与一个或多个写访问争用的极少数情况下,确保线程安全的唯一方法是在整个枚举期间锁定集合.要允许多个线程访问集合以进行读写,您必须实现自己的同步.

您可以在MSDN上阅读有关它的更多信息.

  • 似乎 List&lt;T&gt; 的文档没有声明检索顺序与插入顺序相同。目前它的行为方式确实如此,但没有记录这样做。 (2认同)

Ale*_*gas 7

是的,List<T>保证插入顺序和检索顺序,这在MSDN上有记录(下面的重点是我的).

插入

List<T>.Add 方法

将对象添加到结尾List<T>.

项目参数是:

要添加到的末尾的List<T>对象.

List<T>.AddRange 方法

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

集合参数是:

其元素应添加到结尾的List<T>集合.

恢复

List<T>.Enumerator 结构体

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

Current返回相同的对象,直到MoveNext被调用.MoveNext设置Current下一个元素.

  • 亚历克斯,我想你可能已经得出了一个不合理的结论."集合中的第一个元素"不一定与"添加到集合中的第一个元素"相同.与"最后一个元素"相同.文档没有说明与插入顺序相关的检索顺序. (3认同)

Mit*_*eat 5

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

参考:列表类

  • 我找不到这方面的参考资料,你能引用一下吗? (3认同)