List<T>
是否始终保证在枚举时按照添加的顺序返回项目?
已更新 :感谢所有人的回答,让我放心。我用.NET Reflector快速戳了List<T>
类(首先应该这样做),而且底层商店的数组是T
(T[]
)
答案 0 :(得分:58)
列表是基于索引的,新项目将始终添加到列表的末尾。您可以在某个索引处插入项目,以便下一个项目移动一个位置。
所以是,您可以安全地使用 ......
List(T)类是通用的 相当于ArrayList类。它 实现IList(T)泛型 接口使用大小为的数组 根据需要动态增加。
此集合中的元素可以是 使用整数索引访问。 这个集合中的索引是 基于零的。
不保证列表(T) 排序。您必须对列表(T)进行排序 在执行操作之前(例如 BinarySearch)需要List(T) 待分类。
List(T)可以支持多个读者 同时,只要 集合未被修改。 列举一个集合是 本质上不是线程安全的 程序。在罕见的情况下 枚举与一个或多个竞争 写访问,唯一的方法来确保 线程安全是锁定 整个收集 列举。允许收集 由多个线程访问 读书和写作,你必须 实现自己的同步。
您可以在MSDN上了解更多相关信息。
答案 1 :(得分:7)
是的,List<T>
保证插入顺序和检索顺序,这在MSDN上有记录(下面重点是我的)。
将对象添加到
List<T>
的末尾。
项目参数是:
要添加到
List<T>
的末尾的对象。
将指定集合的元素添加到
List<T>
的末尾。
收集参数是:
应将其元素添加到
List<T>
的末尾的集合。
最初,枚举数位于集合中的第一个元素之前。在此位置,
Current
未定义。因此,在阅读MoveNext
的值之前,您必须致电Current
以将枚举器推进到集合的第一个元素。
Current
返回相同的对象,直到调用MoveNext
为止。 MoveNext
将Current
设置为下一个元素。
答案 2 :(得分:4)
是。但它不是规范的一部分。
参考:List Class
答案 3 :(得分:1)