Generics Collections c#

C# Generics – Prima parte

Il Framework .NET definisce le classi per le collections all’interno di System.Collections e, per i generics all’interno di System.Collections.Generics. L’introduzione delle collections generiche è avvenuta a partire dalla release 2.0 del framework .NET e con il rilascio di C# 2.0.

Generics

L’interfaccia base da cui partire è IEnumerable<T> che consente di effettuare l’iterazione sugli elementi, ad esempio utilizzando il metodo foreach.

L’interfaccia ICollection<T> eredita da IEnumerable<T> e ne aggiunge i metodi per effettuare il Count degli elementi e per modificarli: Add<T>, Remove<T>, Clear() .

Attraverso queste due interfacce è possibile implementare una semplice collection di elementi, ma il framework mette a disposizione alcune interfacce, che ereditano sempre da IEnumerable<T> ma aggiungendone funzionalità specifiche: IList<T>, ISet<T>, IDictionary<TKey, TValue>.

IList<T>

L’interfaccia IList<T> aggiunge alle collections la possibilità di essere indicizzate, introducendo di fatto l’accesso ai singoli elementi tramite il loro indice. Viene quindi aggiunto un indice che consente di impostare / ottenere ogni singolo valore. Vengono anche aggiunti i metodi Insert(…) e RemoveAt(…) rispettivamente per inserire e rimuovere elementi. 

La naturale implementazione di questa interfaccia è la classe List<T>.

ISet<T>

L’interfaccia ISet<T> definisce una collection come un sineme di elementi univoci senza fornire alcuna garanzia sul mantenimento dell’ordinamento. Per poter inserire elementi all’interno della collections è possibile utilizzare il metodo Add(…) che aggiunge l’elemento SOLTANTO se non già presente. Il valore ritornato dal metodo Add consente di determinare se l’elemento è stato inserito oppure no.  Considerando la natura di tipo insiemistico per questo tipo di collections sono presenti anche i metodi UnionWith(…), IntersectWith(…), ExceptWith(…) e SymmetricExceptWith(…).

La naturale implementazione di questa interfaccia è la classe HashSet<T>.

IDictionary<TKey, TValue>

Questa particolare interfaccia, a differenza delle precedenti, consente la memorizzazione di elementi del tipo chiave-valore. Il valore della chiave consente di ottenere il valore associato. E’ presente un metodo Add(…) che accetta in ingresso due parametri: la chiave e il relativo valore. Sono anche presenti metodi che consentono di verificare se una chiave è presente o meno all’interno della collection e per rimuovere un elemento ricercato per la sua chiave: ContainsKey(…) e Remove(…).

La naturale implementazione di questa interfaccia è la classe Dictionary<TKey, TValue>

Nel caso si renda necessario memorizzare le chiavi in maniera ordinata, esistono due specifiche implementazioni: SortedDictionary<TKey, TValue> e SortedList<TKey,TValue>.

Pubblicato da

Andrea Merlin

Laureato in informatica, diversi corsi di specializzazione legati allo Sviluppo Software e alla Computer forensics. Appassionato di nuove tecnologie, amo la programmazione, la Business Intelligence e tematiche legate alla Privacy.Sempre alla ricerca di nuove idee, stimoli … e progetti da seguire!Amo trascorrere il tempo libero in Val Borbera, un piccolo angolo del Piemonte, in provincia di Alessandria.