Quando utilizzare insiemi generici
Aggiornamento: novembre 2007
L'utilizzo di insiemi generici è in genere consigliato poiché offre l'immediato vantaggio dell'indipendenza dai tipi, senza la necessità di derivare da un tipo di insieme base e implementare membri specifici di tipo. I tipi di insiemi generici offrono inoltre prestazioni migliori dei tipi non generici corrispondenti (e dei tipi derivati dai tipi di insiemi base non generici) quando gli elementi di un insieme sono tipi di valore, poiché i generics non richiedono il boxing degli elementi.
I tipi generici riportati di seguito corrispondono a tipi di insiemi esistenti:
Dictionary<TKey, TValue> è la classe generica che corrisponde a Hashtable.
Collection<T> è la classe generica che corrisponde a CollectionBase. Collection<T> può essere utilizzata come classe base, ma a differenza di CollectionBase non è una classe astratta ed è pertanto più facile da utilizzare.
ReadOnlyCollection<T> è la classe generica che corrisponde a ReadOnlyCollectionBase. ReadOnlyCollection<T> non è una classe astratta e dispone di un costruttore che semplifica l'esposizione di una classe List<T> esistente come insieme in sola lettura.
Le classi generiche Queue<T>, Stack<T> e SortedList<TKey, TValue> corrispondono alle classi non generiche con gli stessi nomi.
Tipi aggiuntivi
Esistono diversi tipi di insiemi generici per i quali non esistono tipi non generici corrispondenti:
LinkedList<T> è un elenco collegato di utilizzo generale che consente operazioni di inserimento e rimozione basate su O(1).
SortedDictionary<TKey, TValue> è un dizionario ordinato con operazioni di inserimento e recupero basate su O(log n) e rappresenta una valida alternativa a SortedList<TKey, TValue>.
KeyedCollection<TKey, TItem> è un ibrido tra un elenco e un dizionario che offre un sistema per l'archiviazione di oggetti che contengono le relative chiavi.
LINQ to Objects
La funzionalità LINQ to Objects consente 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. Le query LINQ possono inoltre migliorare le prestazioni. Per ulteriori informazioni, vedere LINQ to Objects.
Funzionalità aggiuntive
Alcuni tipi generici dispongono di funzionalità che non sono presenti nei tipi di insiemi non generici. La classe List<T>, ad esempio, che corrisponde alla classe ArrayList non generica, dispone di un certo numero di metodi che accettano delegati generici, ad esempio il delegato Predicate<T>, che consente di specificare metodi per la ricerca nell'elenco, il delegato Action<T>, che rappresenta i metodi applicabili a ciascun elemento dell'elenco, e il delegato Converter<TInput, TOutput>, che consente di definire le conversioni tra tipi.
La classe List<T> consente di specificare implementazioni di interfacce generiche IComparer<T> personalizzate per l'ordinamento e la ricerca nell'elenco. Anche le classi SortedDictionary<TKey, TValue> e SortedList<TKey, TValue> offrono questa funzionalità e consentono inoltre di specificare gli operatori di confronto al momento della creazione dell'insieme. Analogamente, le classi Dictionary<TKey, TValue> e KeyedCollection<TKey, TItem> consentono di specificare operatori di uguaglianza personalizzati.
Vedere anche
Concetti
Cenni preliminari sui generics in .NET Framework