共用方式為


集合的疑難排解

更新:2007 年 11 月

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

使用錯誤的集合型別

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

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

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

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

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

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

  • Microsoft.VisualBasic:Visual BasicCollection 類別

  • 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,以攔截編譯時期的任何不正確物件指派或成員存取。

請參閱

概念

Visual Basic 中的集合

Visual Basic 集合類別

參考

Option Strict 陳述式