常用的集合类型

集合类型表示收集数据的不同方式,例如哈希表、队列、堆栈、包、字典和列表。

所有集合都直接或间接基于 ICollection<T>ICollection 接口。 IListIDictionary 及其泛型对应项均派生自这两个接口。

在基于 IList 或直接基于 ICollection 的集合中,每个元素都只包含一个值。 这些类型包括:

在基于 IDictionary 接口的集合中,每个元素都只包含一个键和一个值。 这些类型包括:

KeyedCollection<TKey,TItem> 类是唯一的,因为它是值中嵌键的值的列表。 因此,它的行为类似列表和字典。

需要高效的多线程集合访问时,请使用 System.Collections.Concurrent 命名空间中的泛型集合。

QueueQueue<T> 类提供的是先进先出列表。 StackStack<T> 类提供的是后进先出列表。

强类型化

泛型集合都是强类型的最佳解决方案。 例如,将除 Int32 外的任何类型的元素添加到集合 List<Int32> 会导致编译时错误。 但是,如果你的语言不支持泛型,那么 System.Collections 命名空间包含抽象基类,可扩展以创建强类型集合类。 这些基类包括:

集合之间存在哪些不同

集合在存储、排序和比较元素以及执行搜索的方式方面有所不同。

SortedList 类和 SortedList<TKey,TValue> 泛型类提供 Hashtable 类和 Dictionary<TKey,TValue> 泛型类的已排序版本。

所有集合中使用的索引都从零开始,Array 除外,它允许不从零开始的数组。

可以通过键或元素的索引访问 SortedListKeyedCollection<TKey,TItem> 的元素。 只能通过元素的键访问 HashtableDictionary<TKey,TValue> 的元素。

将 LINQ 与集合类型配合使用

LINQ to Objects 功能提供通用模式,用于访问实现 IEnumerableIEnumerable<T> 的任何类型的内存中对象。 与标准构造(如 foreach 循环)相比,LINQ 查询具有多项优势:

  • 简洁明了,更易于理解。
  • 可以对数据进行筛选、排序和分组。
  • 可以提高性能。

有关详细信息,请参阅 “LINQ to Objects (C#)”、“LINQ to Objects (Visual Basic)” 和 “并行 LINQ (PLINQ)”。

Title 描述
集合和数据结构 讨论 .NET 中的各种集合类型,包括堆栈、队列、列表、数组和字典。
哈希表和字典集合类型 描述泛型和非泛型的基于哈希的字典类型的功能。
已排序的集合类型 描述为列表和集提供排序功能的类。
泛型 描述泛型功能,包括 .NET 提供的泛型集合、委托和接口。 为 C#、Visual Basic 和 Visual C++ 提供功能文档链接和支持技术(如反射)链接。

参考

System.Collections

System.Collections.Generic

System.Collections.ICollection

System.Collections.Generic.ICollection<T>

System.Collections.IList

System.Collections.Generic.IList<T>

System.Collections.IDictionary

System.Collections.Generic.IDictionary<TKey,TValue>