集合类型表示收集数据的不同方法,例如哈希表、队列、堆栈、包、字典和列表。
所有集合都以直接或间接方式基于 ICollection 或 ICollection<T> 接口。 IList 及其 IDictionary 泛型对应项都派生自这两个接口。
在基于 IList 或直接依据 ICollection的集合中,每个元素仅包含一个值。 这些类型包括:
在基于IDictionary接口的集合中,每个元素都包含一个键和一个值。 这些类型包括:
- Hashtable
- SortedList
- SortedList<TKey,TValue>
- Dictionary<TKey,TValue>
- ConcurrentDictionary<TKey,TValue>
该 KeyedCollection<TKey,TItem> 类是唯一的,因为它是值内嵌入的键的值列表。 因此,它的行为既像列表一样,也像字典一样。
如果需要高效的多线程集合访问,请使用命名空间中的 System.Collections.Concurrent 泛型集合。
Queue 和 Queue<T> 类提供的是先进先出列表。 这些 Stack 和 Stack<T> 类提供后进先出列表。
强类型化
泛型集合是强键入的最佳解决方案。 例如,将Int32以外的任何类型的元素添加到List<Int32>
集合中都会导致编译时错误。 但是,如果语言不支持泛型,则 System.Collections 命名空间包含可以扩展的抽象基类,以创建强类型化的集合类。 这些基类包括:
集合之间存在哪些不同
集合存储、排序和比较元素的方式以及它们执行搜索的方式有所不同。
SortedList类和SortedList<TKey,TValue>泛型类提供Hashtable类和Dictionary<TKey,TValue>泛型类的排序版本。
所有集合都使用从零开始的索引,除了Array,它允许数组不是从零开始。
可以通过键或元素的索引来访问SortedList或KeyedCollection<TKey,TItem>的元素。 只能通过元素的键来访问Hashtable或Dictionary<TKey,TValue>的元素。
将 LINQ 与集合类型配合使用
LINQ to Objects 功能提供了一种常见模式,用于访问任何实现 IEnumerable 或的 IEnumerable<T>类型的内存中对象。 LINQ 查询相较于标准构造(例如循环)具有多项优势:
- 它们简洁明了,易于理解。
- 他们可以筛选、排序和分组数据。
- 它们可以提高性能。
有关详细信息,请参阅 LINQ to Objects (C#)、LINQ to Objects (Visual Basic)和并行 LINQ (PLINQ)。
相关主题
标题 | DESCRIPTION |
---|---|
集合和数据结构 | 讨论 .NET 中可用的各种集合类型,包括堆栈、队列、列表、数组和字典。 |
哈希表和字典集合类型 | 介绍泛型和非基于哈希的字典类型的功能。 |
已排序的集合类型 | 描述为列表和集提供排序功能的类。 |
泛型 | 介绍泛型功能,包括 .NET 提供的泛型集合、委托和接口。 提供 C#、Visual Basic 和 Visual C++ 功能文档的链接,以及支持反射等技术。 |
参考文献
System.Collections.ICollection
System.Collections.Generic.ICollection<T>
System.Collections.Generic.IList<T>