Share via


疑難排解集合 (Visual Basic)

本頁會列出使用集合時所發生的一些常見問題。

使用錯誤的集合型別

有數種集合型別可供 Visual Basic 開發人員使用:Visual Basic Collection 類別和 .NET Framework 所完成的集合類別 (Collection Class)。 這些類別彼此不相容。 這表示如果將變數宣告為某一種集合型別,您將無法指派另一種型別的物件給該變數。 同時,也只能存取已宣告之集合型別的方法和屬性。

Visual Basic 與 .NET Framework 集合類別的主要差異如下:

  • 索引基底:.NET Framework 集合是「以零起始」(Zero-Based),而 Visual Basic 集合則是「以一起始」(One-Based)。 這表示 Visual Basic 集合的項目具有從 1 到 Count 屬性值的索引值,而 .NET Framework 集合的項目則具有從 0 到集合之 Count 屬性值減一的索引值。

  • 項目型別:Visual Basic 集合會支援型別為 Object 的項目,因為您可以加入任何資料型別的項目,因此這個型別並不是「型別安全」(Type-Safe)。 這通常會造成效能降低,原因在於編譯器必須對項目執行 Box 和 Unbox,才能將它們轉換至或轉換自 Object 資料型別。 有些 .NET Framework 集合也具有型別 Object 的項目,但許多其他項目會是「強型別」(Strongly Typed),表示它們支援特定型別的項目,這使得它們成為型別安全,而且通常會產生最佳效能。

  • 索引鍵項目:Visual Basic 集合可以讓您在加入項目時指定「索引鍵」(Key)。 索引鍵是唯一的 String 值,您可以在稍後用於存取該特定項目。 .NET Framework 集合會隨著索引鍵而有所不同。 有些支援索引鍵,有些則不支援。

包含各種集合類別定義的命名空間 (NameSpace) 如下:

  • Microsoft.VisualBasic:Visual Basic Collection 類別

  • System.Collections:特定的集合類別,如清單、佇列、位元陣列、雜湊資料表和字典

  • System.Collections.Generic:泛型集合類別,可以讓您建立強型別集合,並在建立它們時指定項目資料型別。

  • System.Collections.Specialized:特殊化和強型別集合類別,例如,連結串列 (Linked List) 和 Hybrid Dictionary、位元向量和名稱物件集合,以及只限字串集合

正確的處理方法

判斷哪個集合型別最適合您的需求。 將集合變數宣告為該型別,並確定建立該相同型別的物件。 使用完整限定性條件,確定所指定的集合型別正是所需要的。 下列範例會顯示兩個具有完整限定性條件的宣告。

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

一旦建立了特定型別的集合,請確定您只會使用該型別所定義的方法和屬性。 設定 Option Strict On,以攔截編譯時期的任何不正確物件指派或成員存取。

請參閱

參考

Collection

Option Strict 陳述式

概念

Visual Basic 中的集合