常用的集合类型

更新:2007 年 11 月

集合类型是数据集合的常见变体,例如哈希表、队列、堆栈、字典和列表。

集合基于 ICollection 接口、IList 接口、IDictionary 接口,或其泛型集合中的相应接口。IList 接口和 IDictionary 接口都是从 ICollection 接口派生的;因此,所有集合都直接或间接基于 ICollection 接口。在基于 IList 接口的集合中(如 ArrayArrayListList<T>)或直接基于 ICollection 接口的集合中(如 QueueStackLinkedList<T>),每个元素都只包含一个值。在基于 IDictionary 接口的集合中(如 HashtableSortedList 类,或者 Dictionary<TKey, TValue>SortedList<TKey, TValue> 泛型类),每个元素都包含一个键和一个值。KeyedCollection<TKey, TItem> 类较为特别,因为它是值中带有嵌入键的值列表,因此它的行为既像列表又像字典。

泛型集合是设置强类型的最佳方式。不过,如果所用语言不支持泛型,System.Collections 命名空间中包含基集合,如 CollectionBaseReadOnlyCollectionBaseDictionaryBase,这些都是抽象基类,可以扩展这些抽象基类以创建强类型的集合类。

根据存储元素的方式、对元素进行排序的方式、执行搜索的方式以及进行比较的方式的不同,集合可能也有所不同。Queue 类和 Queue<T> 泛型类提供先进先出列表,而 Stack 类和 Stack<T> 泛型类提供后进先出列表。SortedList 类和 SortedList<TKey, TValue> 泛型类提供 Hashtable 类和 Dictionary<TKey, TValue> 泛型类的排序的版本。HashtableDictionary<TKey, TValue> 中的元素只能通过元素的键访问;而 SortedListKeyedCollection<TKey, TItem> 中的元素既可以通过元素的键访问,也可以通过元素的索引访问。所有集合中的索引都从零开始,不过 Array 除外,它允许使用索引不从零开始的数组。

LINQ to Objects 功能允许使用 LINQ 查询访问内存中的对象,但条件是该对象类型要实现 IEnumerableIEnumerable<T>。LINQ 查询提供了一种通用的数据访问模式;与标准 foreach 循环相比,它通常更加简洁,可读性更高;这种查询可提供筛选、排序和分组功能。LINQ 查询还可提高性能。有关更多信息,请参见 LINQ to Objects

本节内容

参考

相关章节

  • 集合和数据结构
    讨论 .NET Framework 中提供的各种集合类型,包括堆栈、队列、列表、数组和结构。

  • .NET Framework 中的泛型
    描述泛型功能,包括由 .NET Framework 提供的泛型集合、委托和接口。提供指向有关 C#、Visual Basic 和 Visual C++ 的功能文档和支持技术(如反射)的链接。