-
集合疑难解答 (Visual Basic)
本页列出了使用集合时可能发生的一些常见问题。
使用了错误的集合类型
Visual Basic 开发人员可以使用多种类型的集合,包括 Visual Basic Collection 类和 .NET Framework 提供的集合类。 这些类互不兼容。 这意味着,如果您将某个变量声明为一种集合类型,就不能将该另一类型的对象分配给该变量。 此外,您只能访问已声明的集合类型的方法和属性。
Visual Basic 和 .NET Framework 集合类之间的主要差异包括:
-
索引基准。.NET Framework 集合从零开始,而 Visual Basic 集合从一开始。 这意味着,Visual Basic 集合元素的索引值从 1 开始,直至 Count 属性的值,而 .NET Framework 集合元素的索引值则从 0 开始,直至比集合的 Count 属性值小 1 的值。
-
**元素类型。**Visual Basic 集合支持类型为 Object 的元素,该集合不是类型安全的,因为您可以添加任何数据类型的元素。 由于编译器必须将元素“装箱”和“取消装箱”才能将这些元素在 Object 数据类型 之间来回转换,因此这通常会导致性能下降。 某些 .NET Framework 集合也含有类型为 Object 的元素,但另外许多集合都是强类型的(即这些集合支持某个特定类型的元素),这样,这些集合就是类型安全的,这通常可以使性能最优化。
-
**键控元素。**Visual Basic 集合允许您在向其中添加元素时,指定一个键。 该键是一个唯一的 String 值,日后可以用它来访问该特定元素。 .NET Framework 集合随键的不同而不同。 有些集合支持键,有些不支持。
包含各种集合类定义的命名空间如下:
-
Microsoft.VisualBasic — Visual Basic Collection 类
-
System.Collections — 特定的集合类,如列表、队列、位数组、哈希表和字典
-
System.Collections.Generic — 泛型集合类,允许您创建强类型集合,并在创建这些集合时指定元素数据类型
-
System.Collections.Specialized — 专用的强类型集合类,如链接表和混合字典、位向量和名称对象集合以及仅包含字符串的集合
正确方法
确定哪种类型的集合最适合您的需求。 将您的集合变量声明为该类型,并确保创建一个相同类型的对象。 使用完全限定来确保指定您想要指定的集合类型。 下面的示例显示了两个带有完全限定的声明。
Dim customers As New Microsoft.VisualBasic.Collection()
Dim stringQueue As New System.Collections.Generic.Queue(Of String)
创建了特定类型的集合后,确保仅使用针对该类型定义的方法和属性。 设置 Option Strict On,以便在编译时捕获任何不正确的对象分配或成员访问。
原文链接:https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/ms172875(v=vs.100)