Selezione di una classe Collection
Aggiornamento: novembre 2007
La classe di System.Collections deve essere scelta con estrema attenzione, in quanto l'utilizzo del tipo errato può limitare l'utilizzo dell'insieme.
Prendere in considerazione le seguenti domande:
È necessario un elenco sequenziale quando l'elemento viene in genere eliminato dopo che il valore è stato recuperato?
Se la risposta è affermativa, è opportuno utilizzare la classe Queue o la classe generica Queue<T> quando è necessario un comportamento FIFO (First-In-First-Out) oppure la classe Stack o la classe generica Stack<T> quando è necessario un comportamento LIFO (Last-In-First-Out).
Se la risposta è negativa, è opportuno utilizzare gli altri insiemi.
È necessario accedere agli elementi in un determinato ordine, ad esempio FIFO, LIFO o casuale?
La classe Queue e la classe generica Queue<T> consentono l'accesso FIFO.
La classe Stack e la classe generica Stack<T> consentono l'accesso LIFO.
La classe generica LinkedList<T> consente l'accesso sequenziale dall'inizio alla fine o viceversa.
Il resto degli insiemi consente l'accesso casuale.
È necessario accedere a ciascun elemento tramite l'indice?
Le classi ArrayList e StringCollection e la classe generica List<T> consentono l'accesso ai relativi elementi tramite l'indice in base zero dell'elemento.
Le classi Hashtable, SortedList, ListDictionary e StringDictionary e le classi generiche Dictionary<TKey, TValue> e SortedDictionary<TKey, TValue> consentono l'accesso ai relativi elementi tramite la chiave dell'elemento.
Le classi NameObjectCollectionBase e NameValueCollection e le classi generiche KeyedCollection<TKey, TItem> e SortedList<TKey, TValue> consentono l'accesso ai relativi elementi tramite l'indice in base zero o la chiave dell'elemento.
Ogni elemento contiene un valore, una combinazione di una chiave e un valore o una combinazione di una chiave e più valori?
Un valore: utilizzare un qualsiasi insieme basato sull'interfaccia IList o sull'interfaccia generica IList<T>.
Una chiave e un valore: utilizzare un qualsiasi insieme basato sull'interfaccia IDictionary o sull'interfaccia generica IDictionary<TKey, TValue>.
Un valore con chiave incorporata: utilizzare la classe generica KeyedCollection<TKey, TItem>.
Una chiave e più valori: utilizzare la classe NameValueCollection.
È necessario ordinare gli elementi in modo diverso da come sono stati immessi?
Gli elementi della classe Hashtable vengono ordinati in base ai rispettivi codici hash.
Gli elementi della classe SortedList e delle classi generiche SortedDictionary<TKey, TValue> e SortedList<TKey, TValue> vengono ordinati in base alla chiave, a seconda delle implementazioni dell'interfaccia IComparer e dell'interfaccia generica IComparer<T>.
ArrayList fornisce un metodo Sort che accetta come parametro un'implementazione di IComparer. La relativa controparte generica, ossia la classe List<T>, fornisce un metodo Sort che accetta come parametro un'implementazione dell'interfaccia generica IComparer<T>.
Sono necessarie le ricerche veloci e il recupero di informazioni?
- ListDictionary è più veloce di Hashtable per gli insiemi che non superano le 10 voci. La classe generica Dictionary<TKey, TValue> consente ricerche più veloci rispetto alla classe generica SortedDictionary<TKey, TValue>.
Sono necessari insiemi che accettano solo stringhe?
La classe StringCollection (basata su IList) e la classe StringDictionary (basata su IDictionary) sono incluse nello spazio dei nomi System.Collections.Specialized.
È inoltre possibile utilizzare una qualsiasi classe di insiemi generici nello spazio dei nomi System.Collections.Generic come insiemi di stringhe fortemente tipizzati specificando la classe String per i relativi argomenti di tipo generico.
LINQ to Objects
La funzionalità LINQ to Objects consente agli sviluppatori di utilizzare le query LINQ per accedere agli oggetti in memoria purché il tipo dell'oggetto implementi IEnumerable o IEnumerable<T>. Le query LINQ forniscono un modello comune per l'accesso ai dati, sono in genere più concise e leggibili dei cicli standard foreach e forniscono funzioni di filtro, ordinamento e raggruppamento. Inoltre, le query LINQ possono offrire un miglioramento delle prestazioni. Per ulteriori informazioni, vedere LINQ to Objects.
Vedere anche
Riferimenti
System.Collections.Specialized