Sdílet prostřednictvím


Inicializátory kolekcí (Visual Basic)

Inicializátory kolekcí poskytují zkrácenou syntaxi, která umožňuje vytvořit kolekci a naplnit ji počáteční sadou hodnot. Inicializátory kolekcí 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 názvy dnů nebo měsíců nebo zeměpisné umístění, například seznam stavů, které se používají k ověření.

Další informace o kolekcích naleznete v tématu Kolekce.

Inicializátor kolekce identifikujete pomocí klíčového From slova následovaného složenými závorkami ({}). Podobá se syntaxi literálu pole, která je popsána v polích. Následující příklady ukazují 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 kolekcí. Inicializátory kolekcí jazyka C# poskytují stejné funkce jako inicializátory kolekcí jazyka Visual Basic. Další informace o inicializátorech kolekcí jazyka C# naleznete v tématu Inicializátory objektů a kolekcí.

Syntaxe

Inicializátor kolekce se skládá ze seznamu hodnot oddělených čárkami, které jsou uzavřeny ve složených závorkách ({}), před klíčovým slovem From , 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 List<T> nebo Dictionary<TKey,TValue>, musíte zadat typ kolekce před inicializátorem 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 i inicializátor objektů pro inicializaci stejného objektu kolekce. Inicializátory objektů můžete použít k inicializaci objektů v inicializátoru kolekce.

Vytvoření kolekce pomocí inicializátoru kolekce

Když vytvoříte kolekci pomocí inicializátoru kolekce, každá hodnota zadaná v inicializátoru kolekce se předá příslušné Add metodě kolekce. Pokud například vytvoříte List<T> pomocí inicializátoru kolekce, předá se metodě každá řetězcová hodnota v inicializátoru Add kolekce. Pokud chcete vytvořit kolekci pomocí inicializátoru kolekce, musí být zadaný typ platným typem 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 metodu Add , která splňuje následující kritéria.

  • Metoda Add musí být k dispozici z oboru, ve kterém se volá inicializátor kolekce. Metoda Add nemusí být veřejná, pokud používáte inicializátor kolekce ve scénáři, ve kterém lze získat přístup k neveřejným metodám kolekce.

  • Metoda Add musí být členem instance nebo Shared členem třídy kolekce nebo rozšiřující metodou.

  • Musí Add existovat metoda, která se dá spárovat na základě pravidel rozlišení přetížení na typy, které jsou dodá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 se každý Customer objekt předá 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 metodu Add , která má parametry, které odpovídají konstruktoru objektu Customer , můžete vnořit hodnoty parametrů pro metodu Add v inicializátorech kolekce, jak je popsáno v další části. Pokud kolekce takovou metodu Add nemá, můžete ji vytvořit jako metodu rozšíření. Příklad Add vytvoření metody jako rozšiřující metody pro kolekci najdete v tématu Postupy: Vytvoření metody přidání rozšíření používané inicializátorem kolekce. Příklad vytvoření vlastní kolekce, kterou lze použít s inicializátorem kolekce, naleznete v tématu Postupy: Vytvoření kolekce používané inicializátorem kolekce.

Inicializátory vnoření kolekcí

Hodnoty v inicializátoru kolekce můžete vnořit, abyste identifikovali konkrétní přetížení Add metody pro vytvářenou kolekci. Hodnoty předané metodě Add musí být odděleny čárkami a uzavřeny ve složených závorkách {}, jako u literálu pole nebo inicializátoru kolekce.

Když vytvoříte kolekci pomocí vnořených hodnot, každý prvek vnořeného seznamu hodnot se předá jako argument Add metodě, která odpovídá typům prvků. Například následující příklad kódu vytvoří Dictionary<TKey,TValue> , ve kterém klíče jsou typu Integer a hodnoty jsou typu String. Každý seznam vnořených 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")

Do metody Add pro typ kolekce se odesílají pouze seznamy vnořených hodnot z první úrovně vnoření. Hlubší úrovně vnoření se považují za literály pole a seznamy vnořených hodnot se neshodují s metodou Add žádné kolekce.

Titulek Popis
Postupy: Vytvoření metody přidání rozšíření používané inicializátorem kolekce Ukazuje, jak vytvořit rozšiřující metodu, Add která se dá použít k naplnění kolekce hodnotami z inicializátoru kolekce.
Postupy: Vytvoření kolekce, kterou využívá inicializátor kolekce Ukazuje, jak povolit použití inicializátoru kolekce zahrnutím Add metody do třídy kolekce, která implementuje IEnumerable.

Viz také