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:

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).

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

System.Collections.Generic

System.Collections.ICollection

System.Collections.Generic.ICollection<T>

System.Collections.IList

System.Collections.Generic.IList<T>

System.Collections.IDictionary

System.Collections.Generic.IDictionary<TKey,TValue>