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 neboSharedč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.
Související témata
| 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 . |