Share via


集合初始設定式概觀 (Visual Basic)

「集合初始設定式」(Collection Initializer) 提供縮短的語法,供您建立集合並填入一組初始值。 當您從一組已知值 (例如,功能表選項或分類的清單、數值初始集、日期或月份名稱等字串靜態清單,或地理位置如用於驗證的州/省清單) 建立集合時,集合初始設定式會很有用。

使用 From 關鍵字,並在後面接著大括號 ({}),即可識別集合初始設定式。 這類似於 Visual Basic 中的陣列中所述的陣列常值語法。 在下列範例中,會示範以不同方式使用集合初始設定式來建立集合。

' Create an array of type String().
Dim winterMonths = {"December", "January", "February"}

' Create an array of type Integer()
Dim numbers = {1, 2, 3, 4, 5}

' Create a list of menu options. (Requires an extension method
' named Add for List(Of MenuOption)
Dim menuOptions = New List(Of MenuOption) From {{1, "Home"},
                                                {2, "Products"},
                                                {3, "News"},
                                                {4, "Contact Us"}}
注意事項注意事項

C# 也會提供集合初始設定式。 C# 集合初始設定式提供的功能與 Visual Basic 集合初始設定式相同。 如需 C# 集合初始設定式的詳細資訊,請參閱物件和集合初始設定式 (C# 程式設計手冊)

語法

集合初始設定式是由 From 關鍵字後面接著以大括號 ({}) 括住的逗點分隔值清單組成,如下列程式碼所示。

Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}

當您建立如 List<T>Dictionary<TKey, TValue> 等集合時,必須在集合初始設定式之前提供集合型別,如下列程式碼所示。

Public Class AppMenu
    Public Property Items As List(Of String) =
        New List(Of String) From {"Home", "About", "Contact"}
End Class
注意事項注意事項

您無法將集合初始設定式與物件初始設定式合併在一起,來初始化相同的物件集合。 您可以使用物件初始設定式,在集合初始設定式中初始化物件。

使用集合初始設定式建立集合

使用集合初始設定式建立集合時,集合初始設定式中提供的每個值都會傳遞至集合的適當 Add 方法。 例如,如果您使用集合初始設定式建立 List<T>,則集合初始設定式中的每個字串值都會傳遞至 Add 方法。 如果您想要使用集合初始設定式建立集合,則指定的型別必須是有效的集合型別。 有效集合型別的範例包括實作 IEnumerable<T> 介面或繼承 CollectionBase 類別的類別。 指定的型別也必須公開符合下列準則的 Add 方法。

  • Add 方法必須可以從呼叫集合初始設定式的範圍中使用。 如果可以存取集合的非公用方法,那麼您在使用集合初始設定式時,Add 方法就不必是公用方法。

  • Add 方法必須是集合類別的執行個體成員或 Shared 成員,或是擴充方法。

  • Add 方法必須存在,才能根據多載解析規則配合集合初始設定式中提供的型別。

例如,下列程式碼範例示範如何使用集合初始設定式來建立 List(Of Customer) 集合。 當程式碼執行時,每個 Customer 物件就會傳遞至泛型清單的 Add(Customer) 方法。

Dim customers = New List(Of Customer) From
    {
        New Customer("City Power & Light", "http://www.cpandl.com/"),
        New Customer("Wide World Importers", "http://www.wideworldimporters.com/"),
        New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/")
    }

在下列程式碼範例中,會示範不使用集合初始設定式的對等程式碼。

Dim customers = New List(Of Customer) 
customers.Add(New Customer("City Power & Light", "http://www.cpandl.com/"))
customers.Add(New Customer("Wide World Importers", "http://www.wideworldimporters.com/"))
customers.Add(New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/"))

如果集合具有 Add 方法,而且方法的參數符合 Customer 物件的建構函式,則可以在集合初始設定式內巢狀化 Add 方法的參數值,這在下節將會討論。 如果集合沒有這樣的 Add 方法,您可以建立這個方法做為擴充方法。 如需如何建立 Add 方法做為集合擴充方法的範例,請參閱 HOW TO:建立集合初始設定式所使用的 Add 擴充方法 (Visual Basic)。 如需如何建立可搭配集合初始設定式使用之自訂集合的範例,請參閱 HOW TO:建立集合初始設定式所使用的集合 (Visual Basic)

巢狀化集合初始設定式

您可以將值巢狀置於集合初始設定式內,以便在所建立的集合中識別 Add 方法的特定多載。 傳遞至 Add 方法的值必須以逗點分隔,並放在大括號 ({}) 之中,就如同您在陣列常值或集合初始設定式中所做的一樣。

當您使用巢狀值建立集合時,會將巢狀值清單的每個項目當做引數傳遞至對應項目型別的 Add 方法。 例如,下列程式碼範例會建立 Dictionary<TKey, TValue>,其中索引鍵的型別為 Integer,而值的型別則為 String。 每個巢狀值清單都符合 Dictionary 的 Add 方法。

Dim days = New Dictionary(Of Integer, String) From
    {{0, "Sunday"}, {1, "Monday"}}

前述程式碼範例相當於下列程式碼。

Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")

只有第一層巢狀化的巢狀值清單會傳送至集合型別的 Add 方法。 較深層次的巢狀化則視為陣列常值,而且巢狀值清單都不符合任何集合的 Add 方法。

請參閱

工作

HOW TO:建立集合初始設定式所使用的 Add 擴充方法 (Visual Basic)

HOW TO:建立集合初始設定式所使用的集合 (Visual Basic)

HOW TO:在 Visual Basic 中初始化陣列變數

HOW TO:建立項目清單

參考

New 運算子 (Visual Basic)

概念

Visual Basic 中的陣列

物件初始設定式:具名和匿名型別 (Visual Basic)

自動實作的屬性 (Visual Basic)

區域型別推斷 (Visual Basic)

匿名型別 (Visual Basic)

Visual Basic 中的 LINQ 簡介