Übersicht über Auflistungsinitialisierer (Visual Basic)
Auflistungsinitialisierer stellen eine Kurzsyntax bereit, mit der Sie eine Auflistung erstellen und mit einer Reihe von Anfangswerten auffüllen können. Auflistungsinitialisierer sind hilfreich, wenn Sie eine Auflistung aus einer Reihe von bekannten Werten erstellen, beispielsweise einer Liste von Menüoptionen oder Kategorien, einem Anfangssatz von numerischen Werten, einer statischen Liste von Zeichenfolgen wie Tages- oder Monatsnamen oder geografischer Positionen wie einer Liste von Staaten, die zur Validierung verwendet wird.
Ein Auflistungsinitialisierer wird mit dem From-Schlüsselwort gefolgt von geschweiften Klammern ({}) bezeichnet. Dies ähnelt der Arrayliteralsyntax, die in Arrays in Visual Basic beschrieben wird. In den folgenden Beispielen werden verschiedene Möglichkeiten der Verwendung von Auflistungsinitialisierern zum Erstellen von Auflistungen gezeigt.
' 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"}}
Tipp
Auch in C# werden Auflistungsinitialisierer bereitgestellt. C#-Auflistungsinitialisierer stellen dieselben Funktionen wie Visual Basic-Auflistungsinitialisierer bereit. Weitere Informationen über C#-Auflistungsinitialisierer finden Sie unter Objekt- und Auflistungsinitialisierer (C#-Programmierhandbuch).
Syntax
Ein Auflistungsinitialisierer besteht aus einer Liste von durch Trennzeichen getrennten Werten, die in geschweifte Klammern ({}) eingeschlossen werden, wobei das From-Schlüsselwort vorangestellt wird, wie im folgenden Code gezeigt.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
Wenn Sie eine Auflistung wie List<T> oder Dictionary<TKey, TValue> erstellen, müssen Sie den Auflistungstyp vor dem Auflistungsinitialisierer angeben, wie im folgenden Code gezeigt.
Public Class AppMenu
Public Property Items As List(Of String) =
New List(Of String) From {"Home", "About", "Contact"}
End Class
Tipp
Sie können zum Initialisieren des gleichen Auflistungsobjekts nicht beides kombinieren, einen Auflistungsinitialisierer und einen Objektinitialisierer. Mit Objektinitialisierern können Sie Objekte in einem Auflistungsinitialisierer initialisieren.
Erstellen einer Auflistung mit einem Auflistungsinitialisierer
Wenn Sie eine Auflistung mit einem Auflistungsinitialisierer erstellen, wird jeder im Auflistungsinitialisierer angegebene Wert an die entsprechende Add-Methode der Auflistung übergeben. Wenn Sie z. B. eine List<T> mit einem Auflistungsinitialisierer erstellen, wird jeder Zeichenfolgenwert im Auflistungsinitialisierer an die Add-Methode übergeben. Wenn Sie eine Auflistung mit einem Auflistungsinitialisierer erstellen möchten, muss der angegebene Typ ein gültiger Auflistungstyp sein. Zu den Beispielen für gültige Auflistungstypen gehören Klassen, die die IEnumerable<T>-Schnittstelle implementieren oder die CollectionBase-Klasse erben. Der angegebene Typ muss außerdem eine Add-Methode verfügbar machen, die die folgenden Kriterien erfüllt.
Die Add-Methode muss in dem Bereich verfügbar sein, in dem der Auflistungsinitialisierer aufgerufen wird. Wenn Sie den Auflistungsinitialisierer in einem Szenario verwenden, in dem auf nicht öffentliche Methoden der Auflistung zugegriffen werden kann, muss die Add-Methode nicht öffentlich sein.
Die Add-Methode muss ein Instanzmember oder Shared-Member der Auflistungsklasse oder eine Erweiterungsmethode sein.
Es muss eine Add-Methode vorhanden sein, die auf Grundlage von Überladungsauflösungsregeln den Typen zugeordnet werden kann, die im Auflistungsinitialisierer angegeben werden.
Im folgenden Codebeispiel wird gezeigt, wie eine List(Of Customer)-Auflistung mit einem Auflistungsinitialisierer erstellt wird. Bei Ausführung des Codes wird jedes Customer-Objekt an die Add(Customer)-Methode der generischen Liste übergeben.
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/")
}
Im folgenden Codebeispiel wird entsprechender Code gezeigt, in dem kein Auflistungsinitialisierer verwendet wird.
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/"))
Wenn die Auflistung über eine Add-Methode mit Parametern verfügt, die dem Konstruktor für das Customer-Objekt entsprechen, können Sie Parameterwerte für die Add-Methode innerhalb der Auflistungsinitialisierer schachteln, wie im nächsten Abschnitt erläutert. Enthält die Auflistung keine derartige Add-Methode, können Sie diese als Erweiterungsmethode erstellen. Ein Beispiel für das Erstellen einer Add-Methode als Erweiterungsmethode für eine Auflistung finden Sie unter Gewusst wie: Erstellen einer Add-Erweiterungsmethode für einen Auflistungsinitialisierer (Visual Basic). Ein Beispiel für das Erstellen einer benutzerdefinierten Auflistung, die mit einem Auflistungsinitialisierer verwendet werden kann, finden Sie unter Gewusst wie: Erstellen einer Auflistung für einen Auflistungsinitialisierer (Visual Basic).
Schachteln von Auflistungsinitialisierern
Sie können Werte innerhalb eines Auflistungsinitialisierers schachteln, um eine bestimmte Überladung einer Add-Methode für die Auflistung, die erstellt wird, zu identifizieren. Die an die Add-Methode übergebenen Werte müssen durch Trennzeichen getrennt und in geschweifte Klammern ({}) eingeschlossen sein, ebenso wie in einem Arrayliteral oder einem Auflistungsinitialisierer.
Wenn Sie eine Auflistung mit geschachtelten Werten erstellen, wird jedes Element der geschachtelten Werteliste als Argument an die Add-Methode übergeben, die den Elementtypen entspricht. Im folgenden Codebeispiel wird z. B. ein Dictionary<TKey, TValue> mit Schlüsseln des Typs Integer und Werten des Typs String erstellt. Jede der geschachtelten Wertelisten wird der Add-Methode für das Dictionary zugeordnet.
Dim days = New Dictionary(Of Integer, String) From
{{0, "Sunday"}, {1, "Monday"}}
Das vorangegangene Codebeispiel entspricht folgendem Code.
Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")
Nur geschachtelte Wertelisten der ersten Schachtelungsebene werden an die Add-Methode für den Auflistungstyp gesendet. Tiefere Schachtelungsebenen werden wie Arrayliterale behandelt, und die geschachtelten Wertelisten werden nicht der Add-Methode einer Auflistung zugeordnet.
Siehe auch
Aufgaben
Gewusst wie: Erstellen einer Auflistung für einen Auflistungsinitialisierer (Visual Basic)
Gewusst wie: Initialisieren von Arrayvariablen in Visual Basic
Gewusst wie: Erstellen einer Liste von Elementen
Referenz
Konzepte
Objektinitialisierer: Benannte und anonyme Typen (Visual Basic)
Automatisch implementierte Eigenschaften (Visual Basic)