Share via


Quando utilizzare insiemi generici

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.

Per programmi destinati a .NET Framework versione 4 o versione successiva, è necessario utilizzare classi di insiemi generiche nello spazio dei nomi System.Collections.Concurrent quando potrebbe verificarsi che più thread aggiungano o rimuovano elementi dall'insieme contemporaneamente.

I tipi generici riportati di seguito corrispondono a tipi di insiemi esistenti:

Tipi aggiuntivi

Per diversi tipi di insiemi generici non sono disponibili tipi non generici corrispondenti. tra cui:

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 l'interfaccia System.Collections.IEnumerable o System.Collections.Generic.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 e Parallel LINQ (PLINQ).

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> dispongono di questa funzionalità. Inoltre, queste classi consentono di specificare gli operatori di confronto quando viene creato l'insieme. Analogamente, le classi Dictionary<TKey, TValue> e KeyedCollection<TKey, TItem> consentono di specificare operatori di confronto uguaglianze personalizzati.

Vedere anche

Concetti

Tipi di insieme comunemente utilizzati

Generics in .NET Framework