Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli inizializzatori di raccolta forniscono una sintassi abbreviata che consente di creare una raccolta e 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 o categorie di menu, un set iniziale di valori numerici, un elenco statico di stringhe, ad esempio nomi di giorno o mese o posizioni geografiche, ad esempio un elenco di stati utilizzati per la convalida.
Per altre informazioni sulle raccolte, vedere Raccolte.
È possibile identificare un inizializzatore di raccolta usando la From
parola chiave seguita da parentesi graffe ({}
). È simile alla sintassi dei valori letterali di matrice descritta in Matrici. Gli esempi seguenti illustrano diversi modi per usare gli inizializzatori di raccolta per creare 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"}}
Annotazioni
C# fornisce anche inizializzatori di raccolta. Gli inizializzatori di raccolta C# forniscono le stesse funzionalità degli inizializzatori di raccolta di Visual Basic. Per altre informazioni sugli inizializzatori di raccolta C#, vedere Inizializzatori di oggetti e raccolte.
Sintassi
Un inizializzatore di raccolta è costituito da un elenco di valori delimitati da virgole racchiusi tra parentesi graffe ({}
), preceduti dalla From
parola chiave , come illustrato nel codice seguente.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
Quando si crea una raccolta, come ad esempio List<T> o Dictionary<TKey,TValue>, è necessario specificare il tipo di raccolta prima dell'inizializzatore della 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
Annotazioni
Non è possibile combinare sia un inizializzatore di raccolta che un inizializzatore di oggetto per inizializzare lo stesso oggetto raccolta. È possibile usare gli inizializzatori di oggetti 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 fornito nell'inizializzatore di raccolta viene passato al metodo appropriato Add
della raccolta. Ad esempio, se si crea un oggetto List<T> usando un inizializzatore di raccolta, ogni valore 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 un tipo di raccolta valido. Esempi di tipi di raccolta validi includono classi che implementano l'interfaccia IEnumerable<T> o ereditano la CollectionBase classe . Il tipo specificato deve inoltre esporre un Add
metodo che soddisfi i criteri seguenti.
Il
Add
metodo deve essere disponibile nell'ambito in cui viene chiamato l'inizializzatore di raccolta. IlAdd
metodo non deve essere pubblico se si usa l'inizializzatore di raccolta in uno scenario in cui è possibile accedere a metodi non pubblici della raccolta.Il
Add
metodo deve essere un membro istanza oShared
un membro della classe di raccolta o un metodo di estensione.Deve esistere un
Add
metodo che può essere confrontato, in base alle regole di risoluzione dell'overload, ai tipi forniti nell'inizializzatore di raccolta.
Nell'esempio di codice seguente viene illustrato ad esempio come creare una List(Of Customer)
raccolta usando un inizializzatore di raccolta. Quando viene eseguito il codice, ogni Customer
oggetto viene passato al Add(Customer)
metodo 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/")
}
L'esempio di codice seguente mostra codice equivalente che non usa 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 l'insieme dispone di un Add
metodo con parametri che corrispondono al costruttore per l'oggetto Customer
, è possibile annidare i valori dei parametri per il Add
metodo all'interno degli inizializzatori di raccolta, come illustrato nella sezione successiva. Se la raccolta non dispone di un Add
metodo di questo tipo, è possibile crearne uno come metodo di estensione. Per un esempio di come creare un Add
metodo come metodo di estensione per una raccolta, vedere Procedura: Creare un metodo di estensione add usato da un inizializzatore di raccolta. Per un esempio di come creare una raccolta personalizzata che può essere usata con un inizializzatore di raccolta, vedere Procedura: Creare una raccolta utilizzata da un inizializzatore di raccolta.
Annidamento di inizializzatori di raccolta
È possibile annidare i valori all'interno di un inizializzatore di raccolta per identificare un overload specifico di un metodo Add
per la raccolta in fase di creazione. I valori passati al Add
metodo devono essere separati da virgole e racchiusi tra parentesi graffe ({}
), come si farebbe in un inizializzatore di matrice o di raccolta.
Quando si crea una raccolta utilizzando valori annidati, ogni elemento dell'elenco di valori annidati viene passato come argomento al metodo che corrisponde ai Add
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 è associato al metodo Add per il Dictionary
.
Dim days = New Dictionary(Of Integer, String) From
{{0, "Sunday"}, {1, "Monday"}}
L'esempio di codice precedente equivale al codice seguente.
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 Add
metodo per il tipo di raccolta. I livelli più profondi di annidamento vengono considerati come valori letterali di matrice e gli elenchi di valori annidati non corrispondono al Add
metodo di qualsiasi raccolta.
Argomenti correlati
Titolo | Descrizione |
---|---|
Procedura: Creare un metodo di estensione Add utilizzato da un inizializzatore di raccolta | Illustra come creare un metodo di estensione denominato Add che può essere usato per popolare una raccolta con valori di un inizializzatore di raccolta. |
Procedura: Creare una raccolta usata da un inizializzatore di raccolta | Illustra come abilitare l'uso di un inizializzatore di raccolta includendo un Add metodo in una classe di raccolta che implementa IEnumerable . |
Vedere anche
- raccolte
- matrici
- Inizializzatori di oggetti: tipi denominati e anonimi
- Nuovo operatore
- Proprietà implementate automaticamente
- Procedura: Inizializzare una variabile di matrice in Visual Basic
- Inferenza del tipo locale
- Tipi anonimi
- Introduzione a LINQ in Visual Basic
- Procedura: Creare un elenco di elementi