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

时间:2009-01-17 08:48:05

标签: .net list collections

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

已更新 :感谢所有人的回答,让我放心。我用.NET Reflector快速戳了List<T>类(首先应该这样做),而且底层商店的数组是TT[]

4 个答案:

答案 0 :(得分:58)

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

所以,您可以安全地使用 ......

  

List(T)类是通用的   相当于ArrayList类。它   实现IList(T)泛型   接口使用大小为的数组   根据需要动态增加。

     

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

     

不保证列表(T)   排序。您必须对列表(T)进行排序   在执行操作之前(例如   BinarySearch)需要List(T)   待分类。

     

List(T)可以支持多个读者   同时,只要   集合未被修改。   列举一个集合是   本质上不是线程安全的   程序。在罕见的情况下   枚举与一个或多个竞争   写访问,唯一的方法来确保   线程安全是锁定   整个收集   列举。允许收集   由多个线程访问   读书和写作,你必须   实现自己的同步。

您可以在MSDN上了解更多相关信息。

答案 1 :(得分:7)

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

插入

List<T>.Add Method

  

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

项目参数是:

  

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

List<T>.AddRange Method

  

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

收集参数是:

  

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

检索

List<T>.Enumerator Structure

  

最初,枚举数位于集合中的第一个元素之前。在此位置,Current未定义。因此,在阅读MoveNext的值之前,您必须致电Current以将枚举器推进到集合的第一个元素

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

答案 2 :(得分:4)

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

参考:List Class

答案 3 :(得分:1)

根据此MSDN Forum thread

是的