Tipi di raccolte comunemente usate
I tipi di raccolta rappresentano modi diversi per raccogliere i dati, ad esempio tabelle hash, code, stack, contenitori, dizionari ed elenchi.
Tutte le raccolte sono basate sulle interfacce ICollection o ICollection<T>, direttamente o indirettamente. IList e IDictionary e le rispettive controparti generiche derivano tutte da queste due interfacce.
Nelle raccolte basate su IList o direttamente su ICollection, ogni elemento contiene solo un valore. I tipi includono:
Nelle raccolte basate sull'interfaccia IDictionary, ogni elemento contiene sia una chiave che un valore. I tipi includono:
- Hashtable
- SortedList
- SortedList<TKey,TValue>
- Dictionary<TKey,TValue>
- ConcurrentDictionary<TKey,TValue>
La classe KeyedCollection<TKey,TItem> è univoca perché è un elenco di valori con chiavi incorporate all'interno dei valori. Di conseguenza, si comporta sia come un elenco che come un dizionario.
Quando è necessario accedere a raccolte con multithreading efficiente, usare le raccolte generiche nello spazio dei nomi System.Collections.Concurrent.
Le classi Queue e Queue<T> forniscono elenchi first-in-first-out. Le classi Stack e Stack<T> forniscono elenchi last-in-first-out.
Tipizzazione forte
Le raccolte generiche rappresentano la migliore soluzione per la tipizzazione forte. Ad esempio, l'aggiunta di un elemento di qualsiasi tipo diverso da un Int32 a una raccolta List<Int32>
causa un errore in fase di compilazione. Tuttavia, se il linguaggio non supporta i generics, lo spazio dei nomi System.Collections include classi di base astratte che è possibile estendere per creare classi di insiemi fortemente tipizzati. Queste classi di base includono:
Variazione delle raccolte
Le raccolte variano in base al modo in cui archiviano, ordinano e confrontano gli elementi e al modo in cui eseguono le ricerche.
La classe SortedList e la classe generica SortedList<TKey,TValue> rappresentano versioni ordinate della classe Hashtable e della classe generica Dictionary<TKey,TValue>.
Tutte le raccolte usano indici a base zero, ad eccezione di Array, che consente matrici non a base zero.
È possibile accedere agli elementi di un SortedList o un KeyedCollection<TKey,TItem> tramite la chiave o l'indice dell'elemento. È possibile accedere agli elementi di un Hashtable o un Dictionary<TKey,TValue> tramite la chiave dell'elemento.
Usare LINQ con tipi di raccolta
La funzionalità LINQ to Objects fornisce un modello comune per l'accesso a oggetti in memoria di qualsiasi tipo che implementa IEnumerable o IEnumerable<T>. Le query LINQ offrono diversi vantaggi rispetto ai costrutti standard, ad esempio i cicli foreach
:
- Sono concisi e più facili da comprendere.
- Possono filtrare, ordinare e raggruppare i dati.
- Possono migliorare le prestazioni.
Per altre informazioni, vedere LINQ to Objects (C#), LINQ to Objects (Visual Basic) e Parallel LINQ (PLINQ).
Argomenti correlati
Posizione | Descrizione |
---|---|
Raccolte e strutture di dati | Illustra i diversi tipi di raccolta disponibili in .NET, inclusi stack, code, elenchi, matrici e dizionari. |
Tipi di Collection Hashtable e Dictionary | Vengono descritte le funzionalità dei tipi di dizionario basati su hash generici e non generici. |
Tipi di raccolta ordinati | Vengono descritte le classi che forniscono funzionalità di ordinamento per elenchi e set. |
Generics | Illustra la funzionalità generics, inclusi delegati, interfacce e raccolte generiche fornite da .NET. Vengono forniti collegamenti alla documentazione sulle funzionalità per i linguaggi C#, Visual Basic e Visual C++ e a tecnologie di supporto come reflection. |
Riferimento
System.Collections.ICollection
System.Collections.Generic.ICollection<T>
System.Collections.Generic.IList<T>