Auflistungsinitialisierer (Visual Basic)

Auflistungsinitialisierer stellen eine gekürzte Syntax bereit, mit der Sie eine Auflistung erstellen und mit einem anfänglichen Satz von Werten auffüllen können. Auflistungsinitialisierer sind nützlich beim Erstellen einer Auflistung aus einem Satz unbekannter Werte, z.B. eine Liste von Menüoptionen oder Kategorien, ein ursprünglicher Satz numerischer Werte, eine statische Liste von Zeichenfolgen wie Tag- oder Monatsnamen oder geografische Orte, z.B. eine Liste von Staaten, die für eine Überprüfung verwendet werden.

Weitere Informationen über Auflistungen finden Sie unter Auflistungen.

Sie identifizieren einen Auflistungsinitialisierer durch Gebrauch des Schlüsselworts From, gefolgt von Klammern ({}). Dies hat eine Ähnlichkeit mit der Arrayliteralsyntax, die unter Arrays beschrieben ist. Die folgenden Beispiele stellen unterschiedliche Möglichkeiten für die Verwendung von Auflistungsinitialisierern für die Erstellung von Auflistungen dar.

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

Hinweis

C# stellt ebenso Auflistungsinitialisierer bereit. C#-Auflistungsinitialisierer bieten die gleichen Funktionen wie Visual Basic-Auflistungsinitialisierer. Informationen über C#-Auflistungsinitialisierer finden Sie unter Objekt- und Auflistungsinitialisierer.

Syntax

Ein Auflistungsinitialisierer besteht aus einer Liste von durch Komma getrennte Werte, die in Klammern ({}) eingeschlossen sind. Das Schlüsselwort From ist vorangestellt, wie im folgenden Code dargestellt.

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

Wenn Sie eine Auflistung erstellen, z.B. List<T> oder Dictionary<TKey,TValue>, müssen Sie den Auflistungstyp vor dem Auflistungsinitialisierer angeben, so wie im folgenden Code dargestellt.

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

Hinweis

Sie können nicht einen Auflistungsinitialisierer und einen Objektinitialisierer kombinieren, um das gleiche Auflistungsobjekt zu initialisieren. Sie können Objektinitialisierer zum Initialisieren von Objekten in einem Auflistungsinitialisierer verwenden.

Erstellen einer Auflistung durch Verwendung eines Auflistungsinitialisierers

Wenn Sie eine Sammlung durch Verwendung eines Auflistunsinitialisierers erstellen, wird jeder Wert, der im Auflistunsinitialisierer angegeben ist, an die entsprechende Add-Methode der Auflistung übergeben. Wenn Sie z.B. eine List<T> durch Verwendung eines Auflistungsinitialisierers erstellen, wird jeder Zeichenfolgenwert im Auflistungsinitialisierer an die Add-Methode übergeben. Wenn Sie eine Auflistung mithilfe eines Auflistungsinitialisierers erstellen möchten, muss der angegebene Typ ein gültiger Auflistungstyp sein. Beispiele gültiger Auflistungstypen enthalten Klassen, die die IEnumerable<T>-Schnittstelle implementieren oder die CollectionBase-Klasse erben. Der angegebene Typ muss auch eine Add-Methode verfügbar machen, die die folgenden Kriterien erfüllt.

  • Die Add-Methode muss aus dem Bereich verfügbar sein, aus dem der Auflistungsinitialisierer aufgerufen wird. Die Add-Methode muss öffentlich sein, wenn Sie den Auflistungsinitialisierer in einem Szenario verwenden, in dem auf nicht-öffentliche Methode der Auflistung zugegriffen werden kann.

  • Die Add-Methode muss ein Instanzmember oder Shared-Member der Auflistungsklasse sein oder eine Erweiterungsmethode.

  • Es muss eine Add-Methode existieren, die auf Basis von Regeln der Überladungsauflösung mit den Typen verglichen werden kann, die im Auflistungsinitialisierer bereitgestellt werden.

Beispielsweise wird im folgenden Codebeispiel gezeigt, wie eine List(Of Customer)-Auflistung mithilfe eines Auflistungsinitialisierers erstellt wird. Wenn der Code ausgeführt wird, 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/")
    }

Das folgende Codebeispiel zeigt gleichwertigen Code, der keinen Auflistungsinitialisierer verwendet.

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 verfügt, die Parameter besitzt, die mit dem Konstruktor für das Customer-Objekt übereinstimmen, können Sie Parameterwerte für die Add-Methode innerhalb von Auflistungsinitialisierern schachteln, so wie im nächsten Abschnitt beschrieben. Wenn die Auflistung nicht über diese Add-Methode verfügt, können Sie eine als Erweiterungsmethode erstellen. Ein Beispiel, wie Sie eine Add-Methode als Sammlung für eine Auflistung erstellen, finden Sie unter Vorgehensweise: Erstellen einer Add-Erweiterungsmethode für einen Auflistungsinitialisierer. Ein Beispiel, wie Sie eine benutzerdefinierte Auflistung erstellen, die mit einem Auflistungsinitialisierer verwendet werden kann, finden Sie unter Vorgehensweise: Erstellen einer Auflistung für einen Auflistungsinitialisierer.

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 Werte, die an die Add-Methode übergeben werden, müssen durch Kommas getrennt und in Klammern ({}) eingeschlossen werden, so wie Sie das auch in einem Arrayliteral oder Auflistungsinitialisierer tun würden.

Wenn Sie ein Auflistung mithilfe geschachtelter Werte erstellen, wird jedes Element der geschachtelten Werteliste an das Argument an die Add-Methode übergeben, die mit den Elementtypen übereinstimmt. Beispielsweise erstellt das folgende Codebeispiel eine Dictionary<TKey,TValue>, in der die Schlüssel vom Typ Integer und die Werte vom Typ String sind. Jede der geschachtelten Wertelisten wird mit der Add-Methode für Dictionary verglichen.

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

Das vorherige Codebeispiel entspricht dem folgenden Code.

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

Es werden ausschließlich geschachtelte Wertelisten aus der ersten Schachtelungsebene an die Add-Methode für den Auflistungstyp gesendet. Tiefere Schachtelungsebenen werden als Arrayliterale behandelt und die geschachtelten Wertelisten werden der Add-Methode einer Auflistung nicht zugeordnet.

Titel Beschreibung
Vorgehensweise: Erstellen einer Add-Erweiterungsmethode für einen Auflistungsinitialisierer Zeigt, wie eine Erweiterungsmethode namens Add erstellt wird, die zum Auffüllen einer Auflistung mit Werten von einem Auflistungsinitialisierer verwendet werden kann.
Vorgehensweise: Erstellen einer Auflistung für einen Auflistungsinitialisierer Zeigt, wie die Verwendung eines Auflistungsinitialisierers ermöglicht wird, indem eine Add-Methode in eine Auflistungsklasse eingefügt wird, die IEnumerable implementiert.

Siehe auch