Visual Basic 中的集合

更新:2007 年 11 月

一般来说,集合是一个用于对相关对象进行分组和管理的对象。例如,每个 Form 均具有一个控件集合。(可以通过窗体的 Controls 属性来访问此集合。)此集合是一个表示该窗体上所有控件的对象。它允许您按照控件的索引在集合中检索控件,以及使用 For Each...Next 语句 (Visual Basic) 来循环访问集合中的元素。

但是,有几种类型的集合,而且它们在几个方面均互不相同。

不同类型的集合

Visual Basic 也提供了 Collection 类,您可以利用此类定义和创建自己的集合。与窗体的 Controls 集合类似,Collection 类也提供使用 For Each...Next 来循环访问元素以及按照索引检索元素的内置功能。有关更多信息,请参见 Collection 对象 (Visual Basic)

但是,这两种类型的集合互相不能交互操作。例如,下面的代码生成一个编译器错误。

Dim localControls As Collection

' The following line generates a COMPILER ERROR.

localControls = Me.Controls()

由于 Controls 集合是 .NET Framework 集合,而变量 localControls 是 Visual BasicCollection,因此,两种集合互不兼容。这两种类型的集合是通过不同的类实现的。它们的方法相似但不相同,而且它们的索引方案并不相同。

从零开始和从一开始的集合

集合可以从零开始或者从一开始,具体取决于起始索引是什么。前者表示集合中第一个项的索引为 0,而后者表示此索引为 1。从零开始的集合的示例是本页前面讨论过的 .NET FrameworkControls 集合。Visual BasicCollection 对象是一个从一开始的集合的示例。

从一开始的集合对于 Visual Basic 的用户可能更直观,原因是索引是从 1 到 Count 属性(Collection 对象)(它返回集合中的项数)的值。与之相对的是,从零开始的集合的索引是 0 到 Count 属性的值减一。这适用于此情况:索引值是距基值的偏移量,或者对应于从零开始的枚举的成员。

出于标准化的目的,.NET Framework 集合从零开始。而出于与早期版本兼容的目的,Visual BasicCollection 类从一开始。

索引和键值

Visual BasicCollection 类的实例允许您使用数值索引或 String 键来访问项目。可以在指定或不指定键的情况下将项添加到 Visual BasicCollection 对象。如果添加一个没有键的项,则必须使用其数值索引才能访问它。

相反,System.Collections.ArrayList 这类的集合只允许数值索引。除非根据存放键的 String 数组构造自己的映射,否则无法将键与这些集合的元素关联。

添加和移除项

集合在是否可向它们添加项以及如何添加那些项(如果可以添加的话)方面也有差异。因为 Visual BasicCollection 对象是一种通用编程工具,所以它比其他一些集合更灵活。它具有一个用于将项放入集合的 Add 方法(Collection 对象),以及一个用于取出项的 Remove 方法(Collection 对象)

另一方面,某些专用集合不允许您使用代码添加或移除元素。例如,CheckedListBox.CheckedItems 属性按索引返回对项的引用集合,但您的代码无法在此集合中添加或移除项。只有用户通过在用户界面中选择或清除适当的框才能这样做。因此,对于此集合并没有 Add 或 Remove 方法。

请参见

任务

如何:创建对象集合

如何:创建对象数组

如何:添加、删除和检索集合中的项

如何:在类中定义集合

如何:在 Visual Basic 中循环访问集合

有关集合的疑难解答

概念

管理对象组

Visual Basic 集合类

使用集合管理对象