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.
L'uso di raccolte generiche offre il vantaggio automatico della tipizzazione sicura senza dover derivare da un tipo di raccolta di base e implementare membri specifici per tipo. I tipi di raccolta generici offrono inoltre prestazioni migliori rispetto ai corrispondenti tipi di raccolta non generici (e migliori rispetto ai tipi derivati dai tipi di raccolta di base non generici) quando gli elementi della raccolta sono tipi valore, perché con i tipi generici non è necessario eseguire il processo di boxing degli elementi.
Per i programmi destinati a .NET Standard 1.0 o versione successiva, usare le classi di raccolta generiche nel namespace System.Collections.Concurrent quando più thread potrebbero aggiungere o rimuovere elementi dalla raccolta contemporaneamente. Inoltre, quando si desidera l'immutabilità, prendere in considerazione le classi di raccolta generiche nel namespace System.Collections.Immutable.
I tipi generici seguenti corrispondono ai tipi di raccolta esistenti:
Dictionary<TKey,TValue> e ConcurrentDictionary<TKey,TValue> sono le classi generiche che corrispondono a Hashtable.
Collection<T> è la classe generica che corrisponde a CollectionBase. Collection<T> può essere usato come classe di base, ma a differenza CollectionBasedi , non è astratto, che rende molto più semplice l'uso.
ReadOnlyCollection<T> è la classe generica che corrisponde a ReadOnlyCollectionBase. ReadOnlyCollection<T> non è astratto e dispone di un costruttore che semplifica l'esposizione di un oggetto esistente List<T> come raccolta di sola lettura.
Le Queue<T>classi generiche , ConcurrentQueue<T>ImmutableQueue<T>ImmutableArray<T>SortedList<TKey,TValue>, e ImmutableSortedSet<T> corrispondono alle rispettive classi non generiche con gli stessi nomi.
Tipi aggiuntivi
Diversi tipi di raccolta generici non dispongono di controparti non generiche. Includono quanto segue:
LinkedList<T> è un elenco collegato per utilizzo generico che fornisce operazioni di inserimento e rimozione di O(1).
SortedDictionary<TKey,TValue> è un dizionario ordinato con operazioni di inserimento e recupero di O(log
n), che lo rende un'alternativa utile a SortedList<TKey,TValue>.KeyedCollection<TKey,TItem> è un ibrido tra un elenco e un dizionario, che consente di archiviare gli oggetti che contengono le proprie chiavi.
BlockingCollection<T> implementa una classe di raccolta con funzionalità di delimitazione e blocco.
ConcurrentBag<T> fornisce l'inserimento rapido e la rimozione di elementi non ordinati.
Costruttori immutabili
Quando desideri funzionalità di immutabilità nella tua app, il System.Collections.Immutable namespace offre tipi di collezioni generici che puoi usare. Tutti i tipi di raccolta non modificabili offrono Builder classi che possono ottimizzare le prestazioni quando si eseguono più mutazioni. La Builder classe raggruppa le operazioni in batch in uno stato modificabile. Al termine di tutte le mutazioni, chiamare il ToImmutable metodo per bloccare tutti i nodi e creare una raccolta generica non modificabile, ad esempio un oggetto ImmutableList<T>.
L'oggetto Builder può essere creato chiamando il metodo non generico CreateBuilder() . Da un'istanza Builder, è possibile chiamare ToImmutable(). Analogamente, dalla Immutable* raccolta è possibile chiamare ToBuilder() per creare un'istanza del generatore dalla raccolta generica non modificabile. Di seguito sono riportati i vari Builder tipi.
- ImmutableArray<T>.Builder
- ImmutableDictionary<TKey,TValue>.Builder
- ImmutableHashSet<T>.Builder
- ImmutableList<T>.Builder
- ImmutableSortedDictionary<TKey,TValue>.Builder
- ImmutableSortedSet<T>.Builder
LINQ to Objects
La funzionalità LINQ to Objects consente di usare query LINQ per accedere agli oggetti in memoria, purché il tipo di 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ù concisi e leggibili rispetto ai cicli standard foreach e offrono funzionalità di filtro, ordinamento e raggruppamento. Le query LINQ possono anche migliorare le prestazioni. Per altre informazioni, vedere LINQ to Objects (C#),LINQ to Objects (Visual Basic) e PARALLEL LINQ (PLINQ).
Funzionalità aggiuntive
Alcuni tipi generici hanno funzionalità che non sono disponibili nei tipi di raccolta non generici. Ad esempio, la List<T> classe, che corrisponde alla classe non generica ArrayList , include diversi metodi che accettano delegati generici, ad esempio il Predicate<T> delegato che consente di specificare metodi per la ricerca nell'elenco, il Action<T> delegato che rappresenta i metodi che agiscono su ogni elemento dell'elenco e il Converter<TInput,TOutput> delegato che consente di definire conversioni tra tipi.
La List<T> classe consente di specificare le proprie IComparer<T> implementazioni di interfaccia generiche per l'ordinamento e la ricerca nell'elenco. Anche le SortedDictionary<TKey,TValue> classi e SortedList<TKey,TValue> hanno questa funzionalità. Inoltre, queste classi consentono di specificare gli strumenti di confronto al momento della creazione della raccolta. In modo analogo, le classi Dictionary<TKey,TValue> e KeyedCollection<TKey,TItem> permettono di specificare i propri comparatori di uguaglianza.