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. DeAdd
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 ofShared
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 String
zijn. 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.
Verwante onderwerpen
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 IEnumerable die wordt geïmplementeerd. |
Zie ook
- Verzamelingen
- Matrices
- Object initializers: Benoemde en anonieme typen
- Nieuwe operator
- Eigenschappen die automatisch zijn geïmplementeerd
- Procedure: Een matrixvariabele initialiseren in Visual Basic
- Deductie van lokaal type
- Anonieme typen
- Inleiding tot LINQ in Visual Basic
- Procedure: Een lijst met items maken