集合初始化表達式 提供縮短的語法,可讓您建立集合,並填入一組初始值。 當您從一組已知值建立集合時,集合初始化表達式很有用,例如功能表選項或類別清單、初始數值集合、靜態字串清單,例如日期或月份名稱,或地理位置,例如用於驗證的狀態清單。
如需集合的詳細資訊,請參閱 集合。
您可以使用 From
關鍵詞並接著大括弧({}
)來識別集合初始化器。 這類似於在陣列中描述的陣列常值語法。 下列範例顯示各種使用集合初始化表達式來建立集合的方式。
' 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# 集合初始化表達式的詳細資訊,請參閱 物件和集合初始化運算式。
語法
集合初始化表達式包含以大括弧 ({}
) 括住的逗號分隔值清單,前面 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
方法做為集合擴充方法的範例,請參閱 如何:建立集合初始化表達式所使用的 Add Extension 方法。 如需如何建立可與集合初始化表達式搭配使用的自定義集合範例,請參閱 如何:建立集合初始化表達式所使用的集合。
巢狀集合初始化表達式
您可以在集合初始化器中嵌套值,以識別所建立集合之 Add
方法的特定多載。 傳遞至 Add
方法的值必須以逗號分隔,並以大括弧括住,{}
就像您在數位常值或集合初始化表達式中所做的一樣。
當您使用巢狀值建立集合時,巢狀值清單的每個項目都會當做自變數傳遞至 Add
符合項目類型的方法。 例如,下列程式代碼範例會建立Dictionary<TKey,TValue>,其中索引鍵的類型為Integer
,而值的類型為String
。 巢狀值清單中的每一個都會使用 Add 方法來匹配 Dictionary
。
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
相匹配。
[相關主題]
標題 | 說明 |
---|---|
如何:建立集合初始化運算式所使用的 Add Extension 方法 | 示範如何建立稱為 Add 的擴充方法,以使用集合初始化表達式的值填入集合。 |
如何:建立集合初始化運算式所使用的集合 | 如何在實作Add 的集合類別中,通過包含IEnumerable 方法來啟用集合初始化器的使用示範。 |