Freigeben über


Auflistungsinitialisierer (Visual Basic)

Sammlungsinitialisierer stellen eine verkürzte Syntax bereit, mit der Sie eine Sammlung erstellen und mit einem anfänglichen Wertesatz auffüllen können. Sammlungsinitialisierer sind nützlich, wenn Sie eine Auflistung aus einer Reihe bekannter Werte erstellen, z. B. eine Liste mit Menüoptionen oder Kategorien, eine anfängliche Gruppe numerischer Werte, eine statische Liste von Zeichenfolgen wie Tag- oder Monatsnamen oder geografische Standorte wie eine Liste der Zustände, die für die Überprüfung verwendet werden.

Weitere Informationen zu Sammlungen finden Sie unter Sammlungen.

Sie identifizieren einen Sammlungsinitialisierer mithilfe des From Schlüsselworts gefolgt von geschweiften Klammern ({}). Dies ähnelt der Arrayliteralsyntax, die in Arrays beschrieben wird. Die folgenden Beispiele zeigen verschiedene Möglichkeiten, Auflistungsinitialisierer zu verwenden, um Sammlungen zu erstellen.

' 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 auch Sammlungsinitialisierer bereit. C#-Sammlungsinitialisierer bieten die gleiche Funktionalität wie Visual Basic-Sammlungsinitialisierer. Weitere Informationen zu C#-Auflistungsinitialisierern finden Sie unter Object and Collection Initializers.

Syntax

Ein Sammlungsinitialisierer besteht aus einer Liste von kommagetrennten Werten, die von geschweiften Klammern eingeschlossen sind ({}) und dem From Schlüsselwort vorangestellt werden, wie im folgenden Code dargestellt.

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

Wenn Sie eine Auflistung erstellen, z. B. ein List<T> oder ein Dictionary<TKey,TValue>, müssen Sie den Sammlungstyp vor dem Sammlungsinitialisierer 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

Hinweis

Sie können sowohl einen Auflistungsinitialisierer als auch einen Objektinitialisierer nicht kombinieren, um dasselbe Auflistungsobjekt zu initialisieren. Sie können Objektinitialisierer verwenden, um Objekte in einem Auflistungsinitialisierer zu initialisieren.

Erstellen einer Auflistung mithilfe eines Sammlungsinitialisierers

Wenn Sie eine Auflistung mithilfe eines Sammlungsinitialisierers erstellen, wird jeder Wert, der im Sammlungsinitialisierer angegeben wird, 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 Sammlungsinitialisierers erstellen möchten, muss der angegebene Typ gültiger Sammlungstyp sein. Beispiele für gültige Sammlungstypen sind 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 im Bereich verfügbar sein, in dem der Sammlungsinitialisierer aufgerufen wird. Die Add Methode muss nicht öffentlich sein, wenn Sie den Sammlungsinitialisierer in einem Szenario verwenden, in dem auf nicht öffentliche Methoden der Auflistung zugegriffen werden kann.

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

  • Eine Add Methode muss vorhanden sein, die basierend auf Überladungsauflösungsregeln mit den Typen übereinstimmen kann, die im Sammlungsinitialisierer bereitgestellt werden.

Im folgenden Codebeispiel wird z. B. veranschaulicht, wie eine List(Of Customer) Auflistung mithilfe eines Sammlungsinitialisierers 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 einen entsprechenden Code, der keinen Sammlungsinitialisierer 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 enthält, die dem Konstruktor für das Customer Objekt entsprechen, können Sie Parameterwerte für die Add Methode innerhalb von Sammlungsinitialisierern verschachteln, wie im nächsten Abschnitt beschrieben. Wenn die Sammlung keine solche Add Methode aufweist, können Sie eine als Erweiterungsmethode erstellen. Ein Beispiel zum Erstellen einer Add Methode als Erweiterungsmethode für eine Auflistung finden Sie unter So erstellen Sie eine Hinzufügenerweiterungsmethode, die von einem Sammlungsinitialisierer verwendet wird. Ein Beispiel zum Erstellen einer benutzerdefinierten Auflistung, die mit einem Sammlungsinitialisierer verwendet werden kann, finden Sie unter How to: Create a Collection Used by a Collection Initializer.

Schachteln von Auflistungsinitialisierern

Sie können Werte in einem Sammlungsinitialisierer verschachteln, um eine bestimmte Überladung einer Add Methode für die erstellte Auflistung 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 eine Auflistung mithilfe geschachtelter Werte erstellen, wird jedes Element der geschachtelten Wertliste als Argument an die Add Methode übergeben, die den Elementtypen entspricht. ** Im folgenden Codebeispiel wird ein Dictionary<TKey,TValue> erstellt, in dem die Schlüssel vom Typ Integer sind und die Werte vom Typ String. Jede der verschachtelten Wertlisten wird der Add-Methode für Dictionary zugeordnet.

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 Ebenen der Verschachtelung werden als Array-Literale behandelt, und die verschachtelten Wertlisten werden nicht der Add Methode einer Auflistung 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.
So erstellen Sie eine Sammlung, die von einem Sammlungsinitialisierer verwendet wird Zeigt, wie Sie die Verwendung eines Sammlungs-Initialisierers ermöglichen, indem Sie eine Methode in eine Auflistungsklasse Add einschließen, die IEnumerable implementiert.

Siehe auch