Inizializzatori di raccolta (Visual Basic)Collection Initializers (Visual Basic)

Gli inizializzatori di insieme consentono di creare una raccolta e popolarla con un set iniziale di valori.Collection initializers provide a shortened syntax that enables you to create a collection and populate it with an initial set of values. Gli inizializzatori di insieme sono utili quando si crea una raccolta da un set di valori noti, ad esempio un elenco di opzioni di menu o categorie, un set iniziale di valori numerici, un elenco statico di stringhe quali nomi di giorni o mesi o un elenco di aree geografiche, ad esempio un elenco di stati che viene usato per la convalida.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.

Per altre informazioni sulle raccolte, vedere Raccolte.For more information about collections, see Collections.

È possibile identificare un inizializzatore di insieme usando la parola chiave From seguita da parentesi graffe ({}).You identify a collection initializer by using the From keyword followed by braces ({}). Questo approccio è simile alla sintassi dei valori letterali di matrice, descritta in Matrici.This is similar to the array literal syntax that is described in Arrays. Gli esempi seguenti illustrano diversi metodi d'uso degli inizializzatori di insieme per la creazione di raccolte.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"}}

Nota

Anche C# offre inizializzatori di insieme.C# also provides collection initializers. Gli inizializzatori di insieme di C# offrono la stessa funzionalità degli inizializzatori di insieme di Visual Basic.C# collection initializers provide the same functionality as Visual Basic collection initializers. Per altre informazioni sugli inizializzatori di insieme di C#, vedere Inizializzatori di oggetto e di insieme.For more information about C# collection initializers, see Object and Collection Initializers.

SintassiSyntax

Un inizializzatore di insieme è costituito da un elenco di valori delimitati da virgole racchiusi tra parentesi graffe ({}) e preceduti dalla parola chiave From come illustrato nel codice seguente.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"}

Quando si crea una raccolta, ad esempio List<T> o Dictionary<TKey,TValue>, è necessario specificare il tipo di raccolta prima dell'inizializzatore di insieme, come illustrato nel codice seguente.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

Nota

È possibile combinare un inizializzatore di insieme e un inizializzatore di oggetto per inizializzare lo stesso oggetto raccolta.You cannot combine both a collection initializer and an object initializer to initialize the same collection object. È possibile usare gli inizializzatori di oggetto per inizializzare oggetti in un inizializzatore di insieme.You can use object initializers to initialize objects in a collection initializer.

Creazione di una raccolta usando un inizializzatore di raccoltaCreating a Collection by Using a Collection Initializer

Quando si crea una raccolta usando un inizializzatore di insieme, ogni valore specificato nell'inizializzatore di insieme viene passato al metodo Add appropriato della raccolta.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. Se ad esempio si crea un List<T> usando un inizializzatore di insieme, ogni valore stringa nell'inizializzatore di insieme viene passato al metodo Add.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. Se si vuole creare una raccolta usando un inizializzatore di insieme, il tipo specificato deve essere un tipo di raccolta valido.If you want to create a collection by using a collection initializer, the specified type must be valid collection type. Sono esempi di tipi di raccolta validi le classi che implementano l'interfaccia IEnumerable<T> o ereditano la classe CollectionBase.Examples of valid collection types include classes that implement the IEnumerable<T> interface or inherit the CollectionBase class. Il tipo specificato deve anche esporre un metodo Add che soddisfa i criteri seguenti.The specified type must also expose an Add method that meets the following criteria.

  • Il metodo Add deve essere disponibile dall'ambito in cui viene chiamato l'inizializzatore di insieme.The Add method must be available from the scope in which the collection initializer is being called. Non è necessario che il metodo Add sia pubblico se l'inizializzatore di insieme è usato in uno scenario in cui è possibile accedere a metodi non pubblici della raccolta.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.

  • Il metodo Add deve essere un membro di istanza o un membro Shared della classe di raccolta oppure un metodo di estensione.The Add method must be an instance member or Shared member of the collection class, or an extension method.

  • Deve esistere un metodo Add che può corrispondere ai tipi specificati nell'inizializzatore di insieme, in base alle regole di risoluzione dell'overload.An Add method must exist that can be matched, based on overload resolution rules, to the types that are supplied in the collection initializer.

Il codice di esempio seguente illustra come creare una raccolta List(Of Customer) usando un inizializzatore di insieme.For example, the following code example shows how to create a List(Of Customer) collection by using a collection initializer. Quando il codice viene eseguito ogni oggetto Customer viene passato al metodo Add(Customer) dell'elenco generico.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/")
    }

L'esempio di codice seguente visualizza codice equivalente che non usa un inizializzatore di insieme.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/"))

Se la raccolta ha un metodo Add con parametri che corrispondono al costruttore dell'oggetto Customer è possibile nidificare i valori dei parametri per il metodo Add all'interno di inizializzatori di insieme, come descritto nella sezione successiva.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. Se la raccolta non dispone di tale metodo Add è possibile crearne uno come metodo di estensione.If the collection does not have such an Add method, you can create one as an extension method. Per un esempio di come creare un Add metodo come metodo di estensione per una raccolta, vedere come: Creare un metodo di estensione usata da un inizializzatore di raccolta Add.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. Per un esempio di come creare una raccolta personalizzata che può essere usata con un inizializzatore di insieme, vedere come: Creare una raccolta usata da un inizializzatore di raccolta.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.

Annidamento di inizializzatori di insiemeNesting Collection Initializers

È possibile annidare valori in un inizializzatore di insieme per identificare un overload specifico di un metodo Add per la raccolta che viene creata.You can nest values within a collection initializer to identify a specific overload of an Add method for the collection that is being created. I valori passati al metodo Add devono essere separati da virgole e racchiusi tra parentesi graffe ({}), come nella sintassi di un valore letterale di matrice o di un inizializzatore di insieme.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.

Quando si crea una raccolta usando valori annidati ogni elemento dell'elenco di valori annidati viene passato come argomento al metodo Add, che corrisponde ai tipi di elemento.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. Ad esempio il codice seguente crea un Dictionary<TKey,TValue> in cui le chiavi sono di tipo Integer e i valori sono di tipo String.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. Ogni elenco di valori annidati viene associato al metodo Add per Dictionary.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"}}

Il codice dell'esempio precedente equivale al seguente codice.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")

Solo gli elenchi di valori annidati al primo livello di annidamento vengono inviati al metodo Add per il tipo di raccolta.Only nested value lists from the first level of nesting are sent to the Add method for the collection type. I livelli di annidamento più profondi vengono considerati come valori letterali di matrice e gli elenchi di valori annidati non vengono associati al metodo Add di una raccolta.Deeper levels of nesting are treated as array literals and the nested value lists are not matched to the Add method of any collection.

TitoloTitle DescrizioneDescription
Procedura: Creare un metodo di estensione usata da un inizializzatore di raccolta AddHow to: Create an Add Extension Method Used by a Collection Initializer Illustra come creare un metodo di estensione denominato Add che può essere usato per popolare una raccolta con valori di un inizializzatore di insieme.Shows how to create an extension method called Add that can be used to populate a collection with values from a collection initializer.
Procedura: Creare una raccolta usata da un inizializzatore di raccoltaHow to: Create a Collection Used by a Collection Initializer Illustra come abilitare l'uso di un inizializzatore di insieme includendo un metodo Add in una classe di raccolte che implementa IEnumerable.Shows how to enable use of a collection initializer by including an Add method in a collection class that implements IEnumerable.

Vedere ancheSee also