有关集合的疑难解答

更新:2007 年 11 月

本页列出了使用集合时可能发生的一些常见问题。

使用了错误的集合类型

Visual Basic 开发人员可以使用多种类型的集合,包括 Visual BasicCollection 类和 .NET Framework 提供的集合类。这些类互不兼容。这意味着,如果您将某个变量声明为一种集合类型,就不能将该另一类型的对象分配给该变量。此外,您只能访问已声明的集合类型的方法和属性。

Visual Basic 和 .NET Framework 集合类之间的主要差异包括:

  • 索引基准。.NET Framework 集合从零开始,而 Visual Basic 集合从一开始。 这意味着,Visual Basic 集合元素的索引值从 1 开始,直至 Count 属性(Collection 对象) 的值,而 .NET Framework 集合元素的索引值则从 0 开始,直至比集合的 Count 属性值小 1 的值。

  • **元素类型。**Visual Basic 集合支持类型为 Object 的元素,该集合不是类型安全的,因为您可以添加任何数据类型的元素。 由于编译器必须将元素“装箱”和“取消装箱”才能将这些元素在 Object 数据类型 之间来回转换,因此这通常会导致性能下降。 某些 .NET Framework 集合也含有类型为 Object 的元素,但另外许多集合都是强类型的(即这些集合支持某个特定类型的元素),这样,这些集合就是类型安全的,这通常可以使性能最优化。

  • **键控元素。**Visual Basic 集合允许您在向集合中添加元素时指定一个键。 这个键是唯一的 String 值,您以后可以用它来访问该特定元素。.NET Framework 集合随键的不同而不同。有些集合支持键,另一些集合不支持键。

包含各种集合类定义的命名空间如下:

正确方法

确定哪种类型的集合最适合您的需求。将您的集合变量声明为该类型,并确保创建一个相同类型的对象。使用完全限定来确保指定您想要指定的集合类型。下面的示例显示了两个带有完全限定的声明。

Dim customers As New Microsoft.VisualBasic.Collection()
Dim stringQueue As New System.Collections.Generic.Queue(Of String)

创建了特定类型的集合后,确保仅使用针对该类型定义的方法和属性。设置 Option Strict On,以便在编译时捕获任何不正确的对象分配或成员访问。

请参见

概念

Visual Basic 中的集合

Visual Basic 集合类

参考

Option Strict 语句