Partager via


Initialiseurs de collections (Visual Basic)

Les initialiseurs de collection fournissent une syntaxe raccourcie qui vous permet de créer une collection et de la remplir avec un ensemble initial de valeurs. Les initialiseurs de collection sont utiles lorsque vous créez une collection à partir d’un ensemble de valeurs connues, par exemple une liste d’options de menu ou de catégories, un ensemble initial de valeurs numériques, une liste statique de chaînes telles que des noms de jour ou de mois, ou des emplacements géographiques tels qu’une liste d’états utilisés pour la validation.

Pour plus d’informations sur les regroupements, consultez Collections.

Vous identifiez un initialiseur de collection à l’aide du From mot clé suivi des accolades ({}). Il s’agit d’une syntaxe littérale de tableau similaire à celle décrite dans les tableaux. Les exemples suivants montrent différentes façons d’utiliser des initialiseurs de collection pour créer des 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"}}

Remarque

C# fournit également des initialiseurs de collections. Les initialiseurs de collection C# fournissent les mêmes fonctionnalités que les initialiseurs de collection Visual Basic. Pour plus d’informations sur les initialiseurs de collection C#, consultez Object and Collection Initializers.

Syntaxe

Un initialiseur de collection se compose d’une liste de valeurs séparées par des virgules placées entre accolades ({}), précédées du From mot clé, comme illustré dans le code suivant.

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

Lorsque vous créez une collection, telle qu’une List<T> ou une Dictionary<TKey,TValue>, vous devez fournir le type de collection avant l’initialiseur de collection, comme indiqué dans le code suivant.

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

Remarque

Vous ne pouvez pas combiner à la fois un initialiseur de collection et un initialiseur d’objet pour initialiser le même objet de collection. Vous pouvez utiliser des initialiseurs d’objets pour initialiser des objets dans un initialiseur de collection.

Création d’une collection à l’aide d’un initialiseur de collection

Lorsque vous créez une collection à l’aide d’un initialiseur de collection, chaque valeur fournie dans l’initialiseur de collection est passée à la méthode appropriée Add de la collection. Par exemple, si vous créez un List<T> en utilisant un initialiseur de collection, chaque valeur de chaîne dans l'initialiseur de collection est passée à la méthode Add. Si vous souhaitez créer une collection à l’aide d’un initialiseur de collection, le type spécifié doit être un type de collection valide. Des exemples de types de collection valides incluent des classes qui implémentent l’interface IEnumerable<T> ou héritent de la CollectionBase classe. Le type spécifié doit également exposer une Add méthode qui répond aux critères suivants.

  • La méthode Add doit être disponible à partir de la portée dans laquelle l’initialiseur de collection est appelé. La Add méthode n’a pas besoin d’être publique si vous utilisez l’initialiseur de collection dans un scénario où les méthodes non publiques de la collection sont accessibles.

  • La Add méthode doit être un membre d’instance ou Shared un membre de la classe de collection, ou une méthode d’extension.

  • Une Add méthode doit exister qui peut être mise en correspondance, en fonction des règles de résolution de surcharge, aux types fournis dans l’initialiseur de collection.

Par exemple, l’exemple de code suivant montre comment créer une List(Of Customer) collection à l’aide d’un initialiseur de collection. Lorsque le code est exécuté, chaque Customer objet est passé à la Add(Customer) méthode de la liste générique.

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/")
    }

L’exemple de code suivant montre un code équivalent qui n’utilise pas d’initialiseur de collection.

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/"))

Si la collection a une méthode Add ayant des paramètres qui correspondent au constructeur de l’objet Customer, vous pouvez imbriquer des valeurs de paramètre pour la méthode Add dans les initialiseurs de collections, comme indiqué dans la section suivante. Si la collection n’a pas de Add telle méthode, vous pouvez en créer une en tant que méthode d’extension. Pour obtenir un exemple de création d’une Add méthode en tant que méthode d’extension pour une collection, voir Comment : Créer une méthode d'extension Add utilisée par un initialiseur de collection. Pour obtenir un exemple de création d’une collection personnalisée qui peut être utilisée avec un initialiseur de collection, consultez How to : Create a Collection Used by a Collection Initializer.

Imbrication d’initialiseurs de collections

Vous pouvez imbriquer des valeurs dans un initialiseur de collection pour identifier une surcharge spécifique d’une Add méthode pour la collection en cours de création. Les valeurs passées à la méthode Add doivent être séparées par des virgules et placées entre accolades ({}), comme vous le feriez dans un littéral de tableau ou un initialiseur de collection.

Lorsque vous créez une collection à l’aide de valeurs imbriquées, chaque élément de la liste de valeurs imbriquées est passé en tant qu’argument à la Add méthode qui correspond aux types d’éléments. Par exemple, l’exemple de code suivant crée une Dictionary<TKey,TValue> clé dans laquelle les clés sont de type Integer et les valeurs sont de type String. Chacune des listes de valeurs imbriquées est mise en correspondance avec la Add méthode pour le Dictionary.

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

L’exemple de code précédent équivaut au code suivant.

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

Seules les listes de valeurs imbriquées du premier niveau d’imbrication sont envoyées à la méthode Add pour le type de collection. Les niveaux d’imbrication plus profonds sont traités comme des littéraux de tableau et les listes de valeurs imbriquées ne sont pas mises en correspondance avec la méthode Add de toute collection.

Titre Descriptif
Guide pratique pour créer une méthode d’extension Add utilisée par un initialiseur de collection Montre comment créer une méthode d’extension appelée Add qui peut être utilisée pour remplir une collection avec des valeurs d’un initialiseur de collection.
Guide pratique pour créer une collection utilisée par un initialiseur de collection Montre comment activer l’utilisation d’un initialiseur de collection en incluant une Add méthode dans une classe de collection qui implémente IEnumerable.

Voir aussi