Vue d'ensemble des 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 jeu de valeurs connues, par exemple, une liste d'options de menu ou de catégories, un jeu initial de valeurs numériques, une liste statique de chaînes telles que les jours ou les mois, ou des emplacements géographiques tels qu'une liste d'états utilisée pour la validation.

Vous identifiez un initialiseur de collection à l'aide du mot clé From suivi des accolades ({}). Cela s'apparente à la syntaxe de littéral de tableau décrite dans Tableaux dans Visual Basic. Les exemples suivants montrent les différentes façons d'utiliser les initialiseurs de collection pour la création de 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"}}

Notes

C# fournit également des initialiseurs de collection. Les initialiseurs de collection de C# fournissent les mêmes fonctionnalités que les initialiseurs de collection de Visual Basic. Pour plus d'informations sur les initialiseurs de collection C#, consultez Initialiseurs d'objets et de collection (Guide de programmation C#).

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ée par le mot clé From, comme indiqué dans le code suivant.

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

Lorsque vous créez une collection, telle qu'un List<T> ou un 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

Notes

Vous ne pouvez pas combiner 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 Add appropriée de la collection. Par exemple, si vous créez un List<T> à l'aide d'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. Les types de collection valides incluent notamment les classes qui implémentent l'interface IEnumerable<T> ou héritent de la classe CollectionBase. Le type spécifié doit également exposer une méthode Add 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 méthode Add ne doit pas obligatoirement ê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 méthode Add doit être un membre d'instance ou un membre Shared de la classe de collection, ou une méthode d'extension.

  • Il doit exister une méthode Add qui peut être mise en correspondance, selon les règles de résolution de surcharge, avec les types fournis dans l'initialiseur de collection.

L'exemple de code suivant indique comment créer une collection List(Of Customer) à l'aide d'un initialiseur de collection. Lorsque le code est exécuté, chaque objet Customer est passé à la méthode Add(Customer) 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 illustre 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 inclut une méthode Add dont les paramètres correspondent au constructeur pour l'objet Customer, vous pouvez imbriquer des valeurs de paramètre pour la méthode Add dans des initialiseurs de collection, comme décrit dans la section suivante. Si la collection n'a pas de méthode Add, vous pouvez en créer une comme méthode d'extension. Pour obtenir un exemple de création de méthode Add comme méthode d'extension pour une collection, consultez Comment : créer une méthode d'extension Add utilisée par un initialiseur de collection (Visual Basic). Pour obtenir un exemple de création d'une collection personnalisée qui peut être utilisée avec un initialiseur de collection, consultez Comment : créer une collection utilisée par un initialiseur de collection (Visual Basic).

Imbrication d'initialiseurs de collection

Vous pouvez imbriquer des valeurs dans un initialiseur de collection pour identifier une surcharge spécifique d'une méthode Add pour la collection créée. Les valeurs passées à la méthode Add doivent être séparées par des virgules et placées entre accolades ({}), comme 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ée est passé comme argument à la méthode Add qui correspond aux types d'élément. L'exemple de code suivant crée un Dictionary<TKey, TValue> dans lequel les clés sont de type Integer et les valeurs de type String. Chacune des listes de valeurs imbriquées est mise en correspondance avec la méthode Add 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 de l'imbrication sont envoyées à la méthode Add pour le type de collection. Les niveaux plus profonds de l'imbrication sont traités comme littéraux de tableaux et les listes de valeurs imbriquées ne sont pas mises en correspondance avec la méthode Add des collections.

Voir aussi

Tâches

Comment : créer une méthode d'extension Add utilisée par un initialiseur de collection (Visual Basic)

Comment : créer une collection utilisée par un initialiseur de collection (Visual Basic)

Comment : initialiser les variables tableau en Visual Basic

Comment : créer une liste d'éléments

Référence

New, opérateur (Visual Basic)

Concepts

Tableaux dans Visual Basic

Initialiseurs d'objets : types nommés et anonymes (Visual Basic)

Propriétés implémentées automatiquement (Visual Basic)

Inférence de type local (Visual Basic)

Types anonymes (Visual Basic)

Introduction à LINQ dans Visual Basic