Inicializátory kolekcí (Visual Basic)

Inicializátory kolekce poskytují zkrácenou syntaxi, která umožňuje vytvořit kolekci a naplnit ji počáteční sadou hodnot. Inicializátory kolekce jsou užitečné při vytváření kolekce ze sady známých hodnot, například seznamu možností nabídky nebo kategorií, počáteční sady číselných hodnot, statického seznamu řetězců, jako jsou například názvy dnů nebo měsíců nebo zeměpisná umístění, jako je například seznam stavů, které se používají k ověření.

Další informace o kolekcích najdete v tématu kolekce.

Inicializátor kolekce identifikujete pomocí From klíčového slova, po kterém následují složené závorky ( {} ). Toto je podobné syntaxi literálu pole, která je popsána v poli. Následující příklady znázorňují různé způsoby použití inicializátorů kolekcí k vytváření kolekcí.

' 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"}}

Poznámka

Jazyk C# také poskytuje inicializátory kolekce. inicializátory kolekce jazyka C# poskytují stejné funkce jako Visual Basic inicializátory kolekcí. Další informace o inicializátorech kolekce jazyka C# naleznete v tématu Inicializátory objektů a kolekcí.

Syntax

Inicializátor kolekce se skládá ze seznamu hodnot oddělených čárkami, které jsou uzavřeny v závorkách ( {} ), předchází From klíčové slovo, jak je znázorněno v následujícím kódu.

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

Při vytváření kolekce, jako je například List<T> nebo Dictionary<TKey,TValue> , je nutné před inicializátorem kolekce zadat typ kolekce, jak je znázorněno v následujícím kódu.

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

Poznámka

Nelze kombinovat inicializátor kolekce a inicializátor objektu pro inicializaci stejného objektu kolekce. Můžete použít inicializátory objektů k inicializaci objektů v inicializátoru kolekce.

Vytvoření kolekce pomocí inicializátoru kolekce

Když vytváříte kolekci pomocí inicializátoru kolekce, každá hodnota, která je zadána v inicializátoru kolekce, je předána příslušné Add metodě kolekce. Například pokud vytvoříte pomocí List<T> inicializátoru kolekce, každá řetězcová hodnota v inicializátoru kolekce je předána Add metodě. Pokud chcete vytvořit kolekci pomocí inicializátoru kolekce, zadaný typ musí být platný typ kolekce. Příklady platných typů kolekcí zahrnují třídy, které implementují IEnumerable<T> rozhraní nebo dědí CollectionBase třídu. Zadaný typ musí také vystavit Add metodu, která splňuje následující kritéria.

  • AddMetoda musí být k dispozici z oboru, ve kterém je volán inicializátor kolekce. AddMetoda nemusí být veřejná, pokud používáte inicializátor kolekce v situaci, kdy je možné k neveřejným metodám kolekce přistupovat.

  • AddMetoda musí být členem instance nebo Shared členem třídy kolekce nebo metodou rozšíření.

  • AddMetoda musí existovat, která může odpovídat na základě pravidel rozlišení přetížení na typy, které jsou zadány v inicializátoru kolekce.

Například následující příklad kódu ukazuje, jak vytvořit List(Of Customer) kolekci pomocí inicializátoru kolekce. Při spuštění kódu Customer se každý objekt předává Add(Customer) metodě obecného seznamu.

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/")
    }

Následující příklad kódu ukazuje ekvivalentní kód, který nepoužívá inicializátor kolekce.

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/"))

Pokud má kolekce Add metodu, která má parametry odpovídající konstruktoru pro Customer objekt, můžete vnořovat hodnoty parametrů pro Add metodu v rámci inicializátorů kolekce, jak je popsáno v následující části. Pokud kolekce neobsahuje takovou Add metodu, můžete ji vytvořit jako metodu rozšíření. Příklad vytvoření Add metody jako metody rozšíření pro kolekci naleznete v tématu How to: Create a Add rozšiřující metodu, kterou používá inicializátor kolekce. Příklad vytvoření vlastní kolekce, která může být použita s inicializátorem kolekce, naleznete v tématu How to: Create a Collection použit inicializátorem kolekce.

Vnořování inicializátorů kolekce

Můžete vnořovat hodnoty v rámci inicializátoru kolekce pro identifikaci konkrétního přetížení Add metody pro kolekci, která se vytváří. Hodnoty předané Add metodě musí být odděleny čárkami a uzavřeny v závorkách ( {} ), podobně jako v literálu pole nebo inicializátoru kolekce.

Při vytváření kolekce pomocí vnořených hodnot je každý prvek seznamu vnořených hodnot předán jako argument Add metodě, která odpovídá typům prvků. Například následující příklad kódu vytvoří, Dictionary<TKey,TValue> v němž jsou klíče typu Integer a hodnoty jsou typu String . Každý z vnořených seznamů hodnot se shoduje s Add metodou pro Dictionary .

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

Předchozí příklad kódu je ekvivalentní následujícímu kódu.

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

Metodě pro typ kolekce jsou odesílány pouze seznamy s vnořenými hodnotami z první úrovně vnoření Add . Hlubší úrovně vnoření jsou považovány za pole literálů a vnořené seznamy hodnot se neshodují s Add metodou žádné kolekce.

Nadpis Popis
Postupy: Vytvoření metody přidání rozšíření používané inicializátorem kolekce Ukazuje, jak vytvořit rozšiřující metodu nazvanou Add , která může být použita k naplnění kolekce hodnotami z inicializátoru kolekce.
Postupy: Vytvoření kolekce používané inicializátorem kolekce Ukazuje, jak povolit použití inicializátoru kolekce zahrnutím Add metody do třídy kolekce, která implementuje IEnumerable .

Viz také