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