更新:2007 年 11 月
.NET Framework 提供了专用于数据存储和检索的类。这些类支持堆栈、队列、列表和哈希表。大多数集合类实现相同的接口。如果需要,您可以通过实现这些接口来创建您自己的集合类。
您应该确定哪种类型的集合最符合您的需要。
Visual Basic 和 .NET Framework 集合类之间的差异
.NET Framework 集合类是在 System.Collections、System.Collections.Generic、System.Collections.Specialized 和 System.Collections.ObjectModel 命名空间中定义的。Visual Basic 和 .NET Framework 集合类之间的主要差异包括:
索引基础。.NET Framework 集合从 0 开始,而 Visual Basic 集合从 1 开始。这意味着 Visual Basic 集合元素的索引值是从 1 到 Count 属性(Collection 对象)的值,而 .NET Framework 集合元素的索引值是从 0 到集合的 Count 属性值减 1。
元素类型。Visual Basic 集合支持 Object 类型的元素。此集合不是类型安全的,原因是您可以添加任何数据类型的元素。这通常会导致性能下降,原因是您必须将元素从 Object 数据类型转换为它们的实际类型。
某些 .NET Framework 集合还具有 Object 类型的元素,但其他许多集合是强类型的,这意味着它们支持特定类型的元素,这样可使它们是类型安全的且通常能获得最佳性能。
键控元素。通过 Visual Basic 集合,可以在向集合添加元素时指定一个键。该键是一个唯一的字符串值,您可以在以后使用它来访问该特定元素。在关于键的方面,.NET Framework 集合有所不同。有些集合支持键,但有些集合不支持键。
System.Collections 类
System.Collections 命名空间中的类不会将元素存储为指定类型的对象,而是存储为 Object 类型的对象。
下表列出了一部分常用的类:
类 |
说明 |
---|---|
使用大小会根据需要动态增加的数组来实现 IList 接口。 |
|
管理位值的精简数组,这些值表示为 Boolean 值,其中 True 表示位已打开 (1),False 表示位已关闭 (0)。 |
|
表示根据键的哈希代码进行组织的键/值对的集合。 |
|
表示对象的先进先出 (FIFO) 集合。 |
|
表示对象的简单后进先出 (LIFO) 非泛型集合。 |
System.Collections.Generic 和 System.Collections.ObjectModel 类
System.Collections.Generic 和 System.Collections.ObjectModel 命名空间提供了泛型类型,可用于创建强类型的集合以及在创建集合时指定元素的数据类型。
下表列出了一部分常用的类:
类 |
说明 |
---|---|
提供泛型集合的基类。 |
|
表示根据键进行组织的键/值对的集合。 |
|
为键嵌入在值中的集合提供抽象基类。 |
|
表示双向链接列表。 |
|
表示 LinkedList<T> 中的节点。此类不能被继承。 |
|
使用大小会根据需要动态增加的数组来实现 IList<T> 接口。 |
|
表示对象的先进先出集合。 |
|
表示根据键进行排序的键/值对的集合。 |
|
表示根据键进行排序的键/值对的集合,而键基于的是相关的 IComparer<T> 实现。 |
|
表示相同任意类型的实例的可变大小的后进先出 (LIFO) 集合。 |
|
提供泛型只读集合的基类。 |
System.Collections.Specialized 类
System.Collections.Specialized 命名空间提供了专用集合类和强类型的集合类,如只包含字符串的集合以及链接列表和混合字典。
下表列出了一部分常用的类:
类 |
说明 |
---|---|
创建忽略字符串大小写的集合。 |
|
通过以下方法来实现 IDictionary:在集合较小时使用 ListDictionary,然后在集合变大时切换到 Hashtable。 |
|
使用单向链接列表实现 IDictionary。对于通常包含 10 项或更少项的集合,建议使用该实现方法。 |
|
为可以通过键或索引访问的关联字符串键和对象值所组成的集合提供抽象基类。 |
|
表示可以通过键或索引访问的关联字符串键和字符串值所组成的集合。 |
|
表示根据键或索引进行排序的键/值对的集合。 |
|
表示字符串的集合。 |
|
使用字符串(而不是对象)强类型的键和值来实现哈希表。 |