选择集合类时务必要仔细。 选用错误的类型可能限制您使用集合。 通常,应避免使用 System.Collections 命名空间中的类型,除非您专门将目标版本定为 .NET Framework 版本 1.1。 首选使用集合的泛型版本和并发版本,这是因为二者具有更高的类型安全性和其他改进。
考虑以下问题:
您是否需要一个序列列表,其中的元素通常在检索其值后被放弃?
如果需要,那么在需要先进先出 (FIFO) 行为时请考虑使用 Queue 类或 Queue<T> 泛型类。 在需要后进先出 (LIFO) 行为时请考虑使用 Stack 类或 Stack<T> 泛型类。 若要从多个线程进行安全访问,请使用并发版本 ConcurrentQueue<T> 和 ConcurrentStack<T>。
如果不需要,请考虑使用其他集合。
是否需要以某种顺序访问元素,例如 FIFO、LIFO 或随机访问?
Queue 类和 Queue<T> 或 ConcurrentQueue<T> 泛型类提供 FIFO 访问。 有关更多信息,请参见何时使用线程安全集合。
Stack 类和 Stack<T> 或 ConcurrentStack<T> 泛型类提供 LIFO 访问。 有关更多信息,请参见何时使用线程安全集合。
LinkedList<T> 泛型类允许从开头到末尾或从末尾到开头按顺序访问。
是否需要通过索引访问每一元素?
ArrayList 和 StringCollection 类以及 List<T> 泛型类通过元素的从零开始的索引提供对元素的访问。
Hashtable、SortedList、ListDictionary 和 StringDictionary 类以及 Dictionary<TKey, TValue> 和 SortedDictionary<TKey, TValue> 泛型类通过元素的键提供对元素的访问。
NameObjectCollectionBase 和 NameValueCollection 类以及 KeyedCollection<TKey, TItem> 和 SortedList<TKey, TValue> 泛型类通过其元素的从零开始的索引或者通过其元素的键提供对元素的访问。
每一元素将包含一个值、一个键和一个值的组合还是一个键和多个值的组合?
一个键和一个值:使用任何基于 IDictionary 接口或 IDictionary<TKey, TValue> 泛型接口的集合。
带有嵌入的键的一个值:使用 KeyedCollection<TKey, TItem> 泛型类。
一个键和多个值:使用 NameValueCollection 类。
是否需要用与输入元素方式不同的方式对元素排序?
Hashtable 类按其元素的哈希代码对元素排序。
SortedList 类以及 SortedDictionary<TKey, TValue> 和 SortedList<TKey, TValue> 泛型类根据 IComparer 接口和 IComparer<T> 泛型接口的实现按键对元素排序。
ArrayList 提供 Sort 方法,该方法接受 IComparer 实现作为参数。 其对应的泛型类(List<T> 泛型类)提供 Sort 方法,该方法接受 IComparer<T> 泛型接口的实现作为参数。
是否需要信息的快速搜索和检索?
- 对于小集合(10 项或更少),ListDictionary 比 Hashtable 快。 Dictionary<TKey, TValue> 泛型类提供比 SortedDictionary<TKey, TValue> 泛型类更快的查找。 多线程实现是 ConcurrentDictionary<TKey, TValue>。 ConcurrentBag<T> 提供针对未排序的数据的快速多线程插入。 有关这两种多线程类型的更多信息,请参见何时使用线程安全集合。
是否需要只接受字符串的集合?
StringCollection(基于 IList)和 StringDictionary(基于 IDictionary)都位于 System.Collections.Specialized 命名空间中。
此外,通过为泛型类型参数指定 String 类,可以使用 System.Collections.Generic 命名空间中的任何泛型集合类作为强类型字符串集合。
LINQ to Objects 和 PLINQ
利用 LINQ to Objects,开发人员可以使用 LINQ 查询访问内存中的对象,但条件是对象类型实现 IEnumerable 或 IEnumerable<T>。 LINQ 查询提供了一种通用的数据访问模式;与标准 foreach 循环相比,它通常更加简洁,可读性更高;这种查询可提供筛选、排序和分组功能。 有关更多信息,请参见 LINQ to Objects。
PLINQ 提供针对 LINQ to Objects 的并行实现,此实现可通过更高效地使用多核计算机来在多个方案中更快地执行查询。 有关更多信息,请参见并行 LINQ (PLINQ)。
请参见
参考
System.Collections.Specialized