Condividi tramite


Inizializzatori di raccolte (Visual Basic)

Gli inizializzatori di raccolta forniscono una sintassi abbreviata che consente di creare una raccolta e di popolarla con un set iniziale di valori. Gli inizializzatori di raccolta sono utili quando si crea una raccolta da un set di valori noti, ad esempio, un elenco di opzioni di menu o di categorie, un set iniziale di valori numerici, un elenco statico di stringhe quali nomi di giorno o di mese o località geografiche quale un elenco di stati utilizzato per la convalida.

Per ulteriori informazioni sugli insiemi, vedere Raccolte (C# e Visual Basic).

Si identifica un inizializzatore di raccolta utilizzando la parola chiave From seguita da parentesi ({}). È simile alla sintassi del valore letterale della matrice descritta in Matrici in Visual Basic. Negli esempi riportati di seguito vengono illustrate diverse modalità di utilizzo degli inizializzatori di raccolta per creare le raccolte.

' 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 in C# sono disponibili inizializzatori di raccolta.Gli inizializzatori di raccolta di C# forniscono la stessa funzionalità di quelli di Visual Basic.Per ulteriori informazioni sugli inizializzatori di raccolta di C#, vedere Inizializzatori di oggetto e di raccolte (Guida per programmatori C#).

Sintassi

Un inizializzatore di raccolta è costituito da un elenco di valori delimitati da virgole racchiusi tra parentesi ({}), preceduti dalla parola chiave From, come mostrato nel codice seguente.

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

Quando si crea una raccolta, quale un oggetto List o Dictionary, è necessario specificare il tipo di raccolta prima dell'inizializzatore di raccolta, come illustrato nel codice seguente.

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

Nota

Non è possibile utilizzare sia un inizializzatore di raccolta che un inizializzatore di oggetto per inizializzare lo stesso oggetto Collection.È possibile utilizzare gli inizializzatori di oggetto per inizializzare gli oggetti in un inizializzatore di raccolta.

Creazione di una raccolta tramite un inizializzatore di raccolta

Quando si crea una raccolta utilizzando un inizializzatore di raccolta, ogni valore specificato nell'inizializzatore di raccolta viene passato al metodo Add appropriato della raccolta. Se, ad esempio, si crea un oggetto List utilizzando un inizializzatore di raccolta, ogni valore di stringa nell'inizializzatore di raccolta viene passato al metodo Add. Se si desidera creare una raccolta utilizzando un inizializzatore di raccolta, il tipo specificato deve essere il tipo di raccolta valido. Tra gli esempi di tipi di raccolta validi sono incluse le classi che implementano l'interfaccia IEnumerable o ereditano la classe CollectionBase. Il tipo specificato deve inoltre esporre un metodo Add che soddisfa i criteri seguenti.

  • Il metodo Add deve essere disponibile dall'ambito nel quale viene chiamato l'inizializzatore di raccolta. Il metodo Add non deve essere pubblico se si utilizza l'inizializzatore di raccolta in uno scenario dove è possibile accedere a metodi non pubblici della raccolta.

  • Il metodo Add deve essere un membro di istanza o un membro Shared della classe di raccolte oppure un metodo di estensione.

  • Deve esistere un metodo Add corrispondente, in base alle regole di risoluzione dell'overload, ai tipi specificati nell'inizializzatore di raccolta.

Nell'esempio di codice seguente, ad esempio, viene illustrato come creare una raccolta List(Of Customer) utilizzando un inizializzatore di raccolta. Quando viene eseguito il codice, ogni oggetto Customer viene passato al metodo Add(Customer) dell'elenco generico.

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

Nell'esempio di codice seguente viene illustrato il codice equivalente che non utilizza un inizializzatore di raccolta.

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 dispone di un metodo Add con parametri corrispondenti al costruttore per l'oggetto Customer, è possibile annidare valori del parametro per il metodo Add all'interno di inizializzatori di raccolta, come illustrato nella sezione successiva. Se la raccolta non dispone di tale metodo Add, è possibile crearne uno come metodo di estensione. Per un esempio di creazione di un metodo Add come metodo di estensione per una raccolta, vedere Procedura: creare un metodo di estensione Add utilizzato da un inizializzatore di raccolta (Visual Basic). Per un esempio di creazione di una raccolta personalizzata che può essere utilizzata con un inizializzatore di raccolta, vedere Procedura: creare una raccolta utilizzata da un inizializzatore di raccolta (Visual Basic).

Annidamento di inizializzatori di raccolta

È possibile annidare valori all'interno di un inizializzatore di raccolta per identificare un overload specifico di un metodo Add per la raccolta creata. I valori passati al metodo Add devono essere separati da virgole e racchiusi tra parentesi ({}), come in un valore letterale di matrice o in un inizializzatore di raccolta.

Quando si crea una raccolta utilizzando valori annidati, ogni elemento dell'elenco di valori annidati viene passato come argomento al metodo Add che corrisponde ai tipi di elemento. Nell'esempio di codice seguente, ad esempio, viene creato un oggetto Dictionary in cui le chiavi sono di tipo Integer e i valori sono di tipo String. Ognuno degli elenchi di valori annidati corrisponde al metodo Add per l'oggetto Dictionary.

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

Di seguito viene fornito il codice equivalente all'esempio di codice precedente.

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

Solo gli elenchi di valori annidati dal primo livello di annidamento vengono inviati al metodo Add per il tipo di raccolta. I livelli più profondi di annidamento vengono considerati valori letterali di matrice e gli elenchi di valori annidati non corrispondono al metodo Add di alcuna raccolta.

Argomenti correlati

Titolo

Descrizione

Procedura: creare un metodo di estensione Add utilizzato da un inizializzatore di raccolta (Visual Basic)

Viene illustrato come creare un metodo di estensione denominato Add che può essere utilizzato per popolare una raccolta con i valori da un inizializzatore di raccolta.

Procedura: creare una raccolta utilizzata da un inizializzatore di raccolta (Visual Basic)

Viene illustrato come attivare l'utilizzo di un inizializzatore di raccolta includendo Add metodo in una classe di raccolte che implementa IEnumerable.

Vedere anche

Attività

Procedura: inizializzare una variabile di matrice in Visual Basic

Procedura: creare un elenco di elementi

Riferimenti

Operatore New (Visual Basic)

Concetti

Inizializzatori di oggetto: tipi denominati e tipi anonimi (Visual Basic)

Proprietà implementate automaticamente (Visual Basic)

Inferenza del tipo di variabile locale (Visual Basic)

Tipi anonimi (Visual Basic)

Introduzione a LINQ in Visual Basic

Altre risorse

Raccolte (C# e Visual Basic)

Matrici in Visual Basic