Auflistungsinitialisierer (Visual Basic)Collection Initializers (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.Collection initializers provide a shortened syntax that enables you to create a collection and populate it with an initial set of values. 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.Collection initializers are useful when you are creating a collection from a set of known values, for example, a list of menu options or categories, an initial set of numeric values, a static list of strings such as day or month names, or geographic locations such as a list of states that is used for validation.

Weitere Informationen über Auflistungen finden Sie unter Auflistungen.For more information about collections, see Collections.

Sie identifizieren einen Auflistungsinitialisierer durch Gebrauch des Schlüsselworts From, gefolgt von Klammern ({}).You identify a collection initializer by using the From keyword followed by braces ({}). Dies hat eine Ähnlichkeit mit der Arrayliteralsyntax, die unter Arrays beschrieben ist.This is similar to the array literal syntax that is described in Arrays. Die folgenden Beispiele stellen unterschiedliche Möglichkeiten für die Verwendung von Auflistungsinitialisierern für die Erstellung von Auflistungen dar.The following examples show various ways to use collection initializers to create collections.

' 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# also provides collection initializers. C#-Auflistungsinitialisierer bieten die gleichen Funktionen wie Visual Basic-Auflistungsinitialisierer.C# collection initializers provide the same functionality as Visual Basic collection initializers. Informationen über C#-Auflistungsinitialisierer finden Sie unter Objekt- und Auflistungsinitialisierer.For more information about C# collection initializers, see Object and Collection Initializers.

SyntaxSyntax

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.A collection initializer consists of a list of comma-separated values that are enclosed in braces ({}), preceded by the From keyword, as shown in the following code.

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.When you create a collection, such as a List<T> or a Dictionary<TKey,TValue>, you must supply the collection type before the collection initializer, as shown in the following code.

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.You cannot combine both a collection initializer and an object initializer to initialize the same collection object. Sie können Objektinitialisierer zum Initialisieren von Objekten in einem Auflistungsinitialisierer verwenden.You can use object initializers to initialize objects in a collection initializer.

Erstellen einer Auflistung durch Verwendung eines AuflistungsinitialisierersCreating a Collection by Using a Collection Intializer

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.When you create a collection by using a collection initializer, each value that is supplied in the collection initializer is passed to the appropriate Add method of the collection. Wenn Sie z.B. eine List<T> durch Verwendung eines Auflistungsinitialisierers erstellen, wird jeder Zeichenfolgenwert im Auflistungsinitialisierer an die Add-Methode übergeben.For example, if you create a List<T> by using a collection initializer, each string value in the collection initializer is passed to the Add method. Wenn Sie eine Auflistung mithilfe eines Auflistungsinitialisierers erstellen möchten, muss der angegebene Typ ein gültiger Auflistungstyp sein.If you want to create a collection by using a collection initializer, the specified type must be valid collection type. Beispiele gültiger Auflistungstypen enthalten Klassen, die die IEnumerable<T>-Schnittstelle implementieren oder die CollectionBase-Klasse erben.Examples of valid collection types include classes that implement the IEnumerable<T> interface or inherit the CollectionBase class. Der angegebene Typ muss auch eine Add-Methode verfügbar machen, die die folgenden Kriterien erfüllt.The specified type must also expose an Add method that meets the following criteria.

  • Die Add-Methode muss aus dem Bereich verfügbar sein, aus dem der Auflistungsinitialisierer aufgerufen wird.The Add method must be available from the scope in which the collection initializer is being called. 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.The Add method does not have to be public if you are using the collection initializer in a scenario where non-public methods of the collection can be accessed.

  • Die Add-Methode muss ein Instanzmember oder Shared-Member der Auflistungsklasse sein oder eine Erweiterungsmethode.The Add method must be an instance member or Shared member of the collection class, or an extension method.

  • 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.An Add method must exist that can be matched, based on overload resolution rules, to the types that are supplied in the collection initializer.

Beispielsweise wird im folgenden Codebeispiel gezeigt, wie eine List(Of Customer)-Auflistung mithilfe eines Auflistungsinitialisierers erstellt wird.For example, the following code example shows how to create a List(Of Customer) collection by using a collection initializer. Wenn der Code ausgeführt wird, wird jedes Customer-Objekt an die Add(Customer)-Methode der generischen Liste übergeben.When the code is run, each Customer object is passed to the Add(Customer) method of the generic list.

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.The following code example shows equivalent code that does not use a collection initializer.

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.If the collection has an Add method that has parameters that match the constructor for the Customer object, you could nest parameter values for the Add method within collection initializers, as discussed in the next section. Wenn die Auflistung nicht über diese Add-Methode verfügt, können Sie eine als Erweiterungsmethode erstellen.If the collection does not have such an Add method, you can create one as an extension method. 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.For an example of how to create an Add method as an extension method for a collection, see How to: Create an Add Extension Method Used by a Collection Initializer. 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.For an example of how to create a custom collection that can be used with a collection initializer, see How to: Create a Collection Used by a Collection Initializer.

Schachteln von AuflistungsinitialisierernNesting Collection Initializers

Sie können Werte innerhalb eines Auflistungsinitialisierers schachteln, um eine bestimmte Überladung einer Add-Methode für die Auflistung, die erstellt wird, zu identifizieren.You can nest values within a collection initializer to identify a specific overload of an Add method for the collection that is being created. 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.The values passed to the Add method must be separated by commas and enclosed in braces ({}), like you would do in an array literal or collection initializer.

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.When you create a collection by using nested values, each element of the nested value list is passed as an argument to the Add method that matches the element types. Beispielsweise erstellt das folgende Codebeispiel eine Dictionary<TKey,TValue>, in der die Schlüssel vom Typ Integer und die Werte vom Typ String sind.For example, the following code example creates a Dictionary<TKey,TValue> in which the keys are of type Integer and the values are of type String. Jede der geschachtelten Wertelisten wird mit der Add-Methode für Dictionary verglichen.Each of the nested value lists is matched to the Add method for the Dictionary.

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

Das vorherige Codebeispiel entspricht dem folgenden Code.The previous code example is equivalent to the following 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.Only nested value lists from the first level of nesting are sent to the Add method for the collection type. Tiefere Schachtelungsebenen werden als Arrayliterale behandelt und die geschachtelten Wertelisten werden der Add-Methode einer Auflistung nicht zugeordnet.Deeper levels of nesting are treated as array literals and the nested value lists are not matched to the Add method of any collection.

TitelTitle BeschreibungDescription
Gewusst wie: Erstellen einer Add-Erweiterungsmethode für einen AuflistungsinitialisiererHow to: Create an Add Extension Method Used by a Collection Initializer Zeigt, wie eine Erweiterungsmethode namens Add erstellt wird, die zum Auffüllen einer Auflistung mit Werten von einem Auflistungsinitialisierer verwendet werden kann.Shows how to create an extension method called Add that can be used to populate a collection with values from a collection initializer.
Gewusst wie: Erstellen einer Auflistung für einen AuflistungsinitialisiererHow to: Create a Collection Used by a Collection Initializer Zeigt, wie die Verwendung eines Auflistungsinitialisierers ermöglicht wird, indem eine Add-Methode in eine Auflistungsklasse eingefügt wird, die IEnumerable implementiert.Shows how to enable use of a collection initializer by including an Add method in a collection class that implements IEnumerable.

Siehe auchSee Also

SammlungenCollections
ArraysArrays
Objektinitialisierer: Benannte und anonyme TypenObject Initializers: Named and Anonymous Types
New-OperatorNew Operator
Automatisch implementierte EigenschaftenAuto-Implemented Properties
How to: Initialize an Array Variable in Visual Basic (Gewusst wie: Initialisieren einer Arrayvariable in Visual Basic)How to: Initialize an Array Variable in Visual Basic
Lokaler TyprückschlussLocal Type Inference
Anonyme TypenAnonymous Types
Einführung in LINQ in Visual BasicIntroduction to LINQ in Visual Basic
Gewusst wie: Erstellen einer Liste von ElementenHow to: Create a List of Items