Condividi tramite


Cenni preliminari sugli inizializzatori di insieme (Visual Basic)

Gli inizializzatori di insieme forniscono una sintassi abbreviata che consente di creare un insieme e di popolarlo con un set iniziale di valori. Gli inizializzatori di insieme sono utili quando si crea un insieme 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.

Si identifica un inizializzatore di insieme 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 insieme per creare gli insiemi.

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

Sintassi

Un inizializzatore di insieme è 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 un insieme, quale un oggetto List<T> o Dictionary<TKey, TValue>, è necessario specificare il tipo di insieme prima dell'inizializzatore di insieme, 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 insieme 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 insieme.

Creazione di un insieme tramite un inizializzatore di insieme

Quando si crea un insieme utilizzando un inizializzatore di insieme, ogni valore specificato nell'inizializzatore di insieme viene passato al metodo Add appropriato dell'insieme. Se, ad esempio, si crea un oggetto List<T> utilizzando un inizializzatore di insieme, ogni valore di stringa nell'inizializzatore di insieme viene passato al metodo Add. Se si desidera creare un insieme utilizzando un inizializzatore di insieme, il tipo specificato deve essere il tipo di insieme valido. Tra gli esempi di tipi di insieme validi sono incluse le classi che implementano l'interfaccia IEnumerable<T> 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 insieme. Il metodo Add non deve essere pubblico se si utilizza l'inizializzatore di insieme in uno scenario dove è possibile accedere a metodi non pubblici dell'insieme.

  • Il metodo Add deve essere un membro di istanza o un membro Shared della classe di insiemi 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 insieme.

Nell'esempio di codice seguente, ad esempio, viene illustrato come creare un insieme List(Of Customer) utilizzando un inizializzatore di insieme. 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 insieme.

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 l'insieme 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 insieme, come illustrato nella sezione successiva. Se l'insieme 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 un insieme, vedere Procedura: creare un metodo di estensione Add utilizzato da un inizializzatore di insieme (Visual Basic). Per un esempio di creazione di un insieme personalizzato che può essere utilizzato con un inizializzatore di insieme, vedere Procedura: creare un insieme utilizzato da un inizializzatore di insieme (Visual Basic).

Annidamento di inizializzatori di insieme

È possibile annidare valori all'interno di un inizializzatore di insieme per identificare un overload specifico di un metodo Add per l'insieme creato. 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 insieme.

Quando si crea un insieme 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<TKey, TValue> 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 insieme. I livelli più profondi di annidamento vengono considerati valori letterali di matrice e gli elenchi di valori annidati non corrispondono al metodo Add di alcun insieme.

Vedere anche

Attività

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

Procedura: creare un insieme utilizzato da un inizializzatore di insieme (Visual Basic)

Procedura: inizializzare variabili di matrice in Visual Basic

Procedura: creare un elenco di elementi

Riferimenti

Operatore New (Visual Basic)

Concetti

Matrici in Visual Basic

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