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.
Assicurarsi di scegliere attentamente la classe di raccolta. Utilizzare il tipo sbagliato può limitare l'accesso alla raccolta.
Importante
Evitare di usare i tipi nello spazio dei nomi System.Collections. Le versioni generiche e simultanee delle raccolte sono consigliate a causa della maggiore sicurezza dei tipi e di altri miglioramenti.
Considerare le domande seguenti:
È necessario un elenco sequenziale in cui l'elemento viene in genere rimosso dopo il recupero del relativo valore?
In caso affermativo, è consigliabile usare la Queue classe o la Queue<T> classe generica se è necessario un comportamento FIFO (First-In First-Out). È consigliabile usare la Stack classe o la Stack<T> classe generica se è necessario un comportamento LIFO (Last-In First Out). Per l'accesso sicuro da più thread, usare le versioni ConcurrentQueue<T> simultanee e ConcurrentStack<T>. Per l'immutabilità, considerare le versioni ImmutableQueue<T> non modificabili e ImmutableStack<T>.
In caso contrario, prendere in considerazione l'uso delle altre raccolte.
È necessario accedere agli elementi in un determinato ordine, ad esempio FIFO, LIFO o casuale?
La Queue classe , nonché le Queue<T>classi generiche , ConcurrentQueue<T>e ImmutableQueue<T> offrono tutti l'accesso FIFO. Per ulteriori informazioni, vedere Quando usare una raccolta Thread-Safe.
La Stack classe , nonché le Stack<T>classi generiche , ConcurrentStack<T>e ImmutableStack<T> offrono tutti l'accesso LIFO. Per ulteriori informazioni, vedere Quando usare una raccolta Thread-Safe.
La LinkedList<T> classe generica consente l'accesso sequenziale dalla testa alla coda o dalla coda alla testa.
È necessario accedere a ogni elemento in base all'indice?
Le classi ArrayList e StringCollection e la classe generica List<T> offrono l'accesso ai loro elementi mediante l'indice basato su zero dell'elemento. Per l'immutabilità, considerare le versioni ImmutableArray<T> generice non modificabili e ImmutableList<T>.
Le classi Hashtable, SortedList, ListDictionary e StringDictionary e le classi generiche Dictionary<TKey,TValue> e SortedDictionary<TKey,TValue> offrono l'accesso ai relativi elementi tramite la chiave dell'elemento. Sono inoltre disponibili versioni non modificabili di diversi tipi corrispondenti: ImmutableHashSet<T>, ImmutableDictionary<TKey,TValue>, ImmutableSortedSet<T>e ImmutableSortedDictionary<TKey,TValue>.
Le classi NameObjectCollectionBase e NameValueCollection, e le classi generiche KeyedCollection<TKey,TItem> e SortedList<TKey,TValue> offrono l'accesso ai loro elementi tramite l'indice a base zero o tramite la chiave dell'elemento.
Ogni elemento conterrà un valore, una combinazione di una chiave e un valore o una combinazione di una chiave e più valori?
Un valore: utilizzare una delle raccolte basate sull'interfaccia IList o sull'interfaccia generica IList<T>. Per un'opzione non modificabile, prendere in considerazione l'interfaccia IImmutableList<T> generica.
Una chiave e un valore: utilizzare una delle raccolte basate sull'interfaccia IDictionary o sull'interfaccia generica IDictionary<TKey,TValue>. Per un'opzione non modificabile, considerare le interfacce generiche IImmutableSet<T> o IImmutableDictionary<TKey,TValue>.
Un valore con chiave incorporata: usare la KeyedCollection<TKey,TItem> classe generica.
Una chiave e più valori: usare la NameValueCollection classe .
È necessario ordinare gli elementi in modo diverso da come sono stati immessi?
La Hashtable classe ordina i relativi elementi in base ai relativi codici hash.
La classe SortedList e le classi generiche SortedList<TKey,TValue> e SortedDictionary<TKey,TValue> ordinano i loro elementi in base alla chiave. L'ordinamento si basa sull'implementazione dell'interfaccia IComparer per la SortedList classe e sull'implementazione dell'interfaccia IComparer<T> generica per le SortedList<TKey,TValue> classi generiche e SortedDictionary<TKey,TValue> . Dei due tipi generici, SortedDictionary<TKey,TValue> offre prestazioni migliori rispetto a SortedList<TKey,TValue>, mentre SortedList<TKey,TValue> usa meno memoria.
ArrayList fornisce un metodo che accetta un'implementazione SortIComparer come parametro. La controparte generica, la List<T> classe generica, fornisce un Sort metodo che accetta un'implementazione dell'interfaccia IComparer<T> generica come parametro.
Hai bisogno di ricerche rapide e recupero di informazioni?
- ListDictionary è più veloce rispetto Hashtable alle raccolte di piccole dimensioni (10 elementi o meno). La Dictionary<TKey,TValue> classe generica offre una ricerca più veloce rispetto alla SortedDictionary<TKey,TValue> classe generica. L'implementazione multithreading è ConcurrentDictionary<TKey,TValue>. ConcurrentBag<T> fornisce un inserimento multithread rapido per i dati non ordinati. Per ulteriori informazioni su entrambi i tipi multithread, vedere When to Use a Thread-Safe Collection.
Ti servono raccolte che accettano solo stringhe?
StringCollection (in base a IList) e StringDictionary (in base a IDictionary) si trovano nello spazio dei nomi System.Collections.Specialized.
Inoltre, è possibile utilizzare qualsiasi classe di raccolta generica nello spazio dei nomi System.Collections.Generic come raccolte di stringhe fortemente tipate specificando la classe String per i relativi argomenti di tipo generico. Ad esempio, è possibile dichiarare una variabile di tipo List<String> o Dictionary<String,String>.
LINQ to Objects e PLINQ
LINQ to Objects consente agli sviluppatori di usare query LINQ per accedere agli oggetti in memoria, purché il tipo di oggetto implementi IEnumerable o IEnumerable<T>. Le query LINQ offrono un modello comune per l'accesso ai dati, sono in genere più concise e leggibili rispetto ai cicli standard foreach
e offrono funzionalità di filtro, ordinamento e raggruppamento. Per altre informazioni, vedere LINQ to Objects (C#) e LINQ to Objects (Visual Basic).
PLINQ offre un'implementazione parallela di LINQ to Objects che può offrire un'esecuzione più rapida delle query in molti scenari, grazie all'uso più efficiente di computer multicore. Per altre informazioni, vedere PARALLEL LINQ (PLINQ).For more information, see Parallel LINQ (PLINQ).