Initialisatie van verzamelingen (Visual Basic)

Verzamelings initializers bieden een verkorte syntaxis waarmee u een verzameling kunt maken en vullen met een eerste set waarden. Initialisatieprogramma's voor verzamelingen zijn handig wanneer u een verzameling maakt op basis van een set bekende waarden, bijvoorbeeld een lijst met menuopties of categorieën, een eerste set numerieke waarden, een statische lijst met tekenreeksen zoals dag- of maandnamen of geografische locaties, zoals een lijst met statussen die wordt gebruikt voor validatie.

Zie Verzamelingen voor meer informatie over verzamelingen.

U identificeert een initialisatiefunctie voor verzamelingen met behulp van het From trefwoord gevolgd door accolades ({}). Dit is vergelijkbaar met de letterlijke syntaxis van de matrix die wordt beschreven in matrices. In de volgende voorbeelden ziet u verschillende manieren om verzamelingen te initialisatieprogramma's te gebruiken om verzamelingen te maken.

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

Notitie

C# biedt ook initialisatie van verzamelingen. Initialisatiefuncties voor C#-verzamelingen bieden dezelfde functionaliteit als Visual Basic initialisatiefuncties voor verzamelingen. Zie Initialisatiefuncties voor objecten en verzamelingen voor meer informatie over initialisatiefuncties voor C#-verzamelingen.

Syntax

Een verzamelings initialisatiefunctie bestaat uit een lijst met door komma's gescheiden waarden die tussen accolades ({}) staan, voorafgegaan door het From trefwoord, zoals wordt weergegeven in de volgende code.

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

Wanneer u een verzameling maakt, zoals een List<T> of een Dictionary<TKey,TValue>, moet u het verzamelingstype opgeven vóór de initialisatiefunctie van de verzameling, zoals wordt weergegeven in de volgende code.

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

Notitie

U kunt zowel een initialisatiefunctie voor verzamelingen als een object initialisatiefunctie niet combineren om hetzelfde verzamelingsobject te initialiseren. U kunt object initialisatiefuncties gebruiken om objecten in een verzamelings-initialisatie te initialiseren.

Een verzameling maken met behulp van een initialisatiefunctie voor verzamelingen

Wanneer u een verzameling maakt met behulp van een initialisatiefunctie voor verzamelingen, wordt elke waarde die wordt opgegeven in de initialisatiefunctie voor verzamelingen doorgegeven aan de juiste Add methode van de verzameling. Als u bijvoorbeeld een List<T> verzamelings-initialisatiefunctie maakt, wordt elke tekenreekswaarde in de initialisatiefunctie voor verzamelingen doorgegeven aan de Add methode. Als u een verzameling wilt maken met behulp van een initialisatiefunctie voor verzamelingen, moet het opgegeven type een geldig verzamelingstype zijn. Voorbeelden van geldige verzamelingstypen zijn klassen die de IEnumerable<T> interface implementeren of de CollectionBase klasse overnemen. Het opgegeven type moet ook een Add methode beschikbaar maken die voldoet aan de volgende criteria.

  • De Add methode moet beschikbaar zijn vanuit het bereik waarin de initialisatiefunctie voor verzamelingen wordt aangeroepen. De Add methode hoeft niet openbaar te zijn als u de initialisatiefunctie voor verzamelingen gebruikt in een scenario waarin niet-openbare methoden van de verzameling toegankelijk zijn.

  • De Add methode moet een exemplaarlid of lid van de verzamelingsklasse of Shared een extensiemethode zijn.

  • Er moet een Add methode bestaan die kan worden vergeleken, op basis van regels voor overbelastingsresolutie, voor de typen die worden geleverd in de initialisatiefunctie voor verzamelingen.

In het volgende codevoorbeeld ziet u bijvoorbeeld hoe u een List(Of Customer) verzameling maakt met behulp van een initialisatiefunctie voor verzamelingen. Wanneer de code wordt uitgevoerd, wordt elk Customer object doorgegeven aan de Add(Customer) methode van de algemene lijst.

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

In het volgende codevoorbeeld ziet u equivalente code die geen initialisatiefunctie voor verzamelingen gebruikt.

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

Als de verzameling een Add methode heeft die parameters bevat die overeenkomen met de constructor voor het Customer object, kunt u parameterwaarden nesten voor de Add methode binnen verzamelings initializers, zoals wordt besproken in de volgende sectie. Als de verzameling geen dergelijke Add methode heeft, kunt u er een maken als extensiemethode. Zie Procedure voor het maken van een Add methode als extensiemethode voor een verzameling voor een voorbeeld van het maken van een uitbreidingsmethode: Een uitbreidingsmethode maken die wordt gebruikt door een initialisatiefunctie voor verzamelingen. Zie Procedure voor het maken van een aangepaste verzameling die kan worden gebruikt met een initialisatiefunctie voor verzamelingen: Een verzameling maken die wordt gebruikt door een initialisatiefunctie voor verzamelingen.

Initialisatie van verzamelingen nesten

U kunt waarden in een initialisatiefunctie voor verzamelingen nesten om een specifieke overbelasting van een Add methode te identificeren voor de verzameling die wordt gemaakt. De waarden die aan de Add methode worden doorgegeven, moeten worden gescheiden door komma's en tussen accolades ({}), zoals u zou doen in een letterlijke matrix of verzamelings initialisatiefunctie.

Wanneer u een verzameling maakt met behulp van geneste waarden, wordt elk element van de geneste waardenlijst doorgegeven als argument aan de Add methode die overeenkomt met de elementtypen. In het volgende codevoorbeeld wordt bijvoorbeeld een Dictionary<TKey,TValue> code gemaakt waarin de sleutels van het type Integer zijn en de waarden van het type Stringzijn. Elk van de geneste waardenlijsten komt overeen met de Add methode voor de Dictionary.

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

Het vorige codevoorbeeld is gelijk aan de volgende code.

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

Alleen geneste waardenlijsten van het eerste nestniveau worden verzonden naar de Add methode voor het verzamelingstype. Diepere niveaus van nesten worden behandeld als letterlijke matrixwaarden en de geneste waardenlijsten komen niet overeen met de Add methode van een verzameling.

Titel Beschrijving
Procedure: Een methode voor het toevoegen van extensies maken die wordt gebruikt door een initialisatiefunctie voor verzamelingen Laat zien hoe u een extensiemethode Add maakt die kan worden gebruikt om een verzameling te vullen met waarden van een initialisatiefunctie voor verzamelingen.
Procedure: Een verzameling maken die wordt gebruikt door een initialisatiefunctie voor verzamelingen Laat zien hoe u het gebruik van een verzamelingsinitiator inschakelt door een Add methode op te nemen in een verzamelingsklasse IEnumerabledie wordt geïmplementeerd.

Zie ook