List e ArrayList sono delle raccolte di dati o di oggetti, dette Collection, che offrono una maggiore flessibilità rispetto agli array perché non hanno una dimensione fissa e, inoltre, possono contenere elementi di tipo diverso.

Il C# dispone di due diversi tipi di liste basate sulle classi:

  • List, per elementi dello stesso tipo
  • ArrayList, per elementi di diverso tipo
Le collection List e ArrayList

List e ArrayList

Le collection di tipo List e ArrayList sono molto simili e hanno in comune diversi metodi che consentono di svolgere i compiti più comuni, come quelli mostrati negli esempi seguenti.

List<>

Le liste tipizzate possono contenere un numero qualsiasi di elementi purché siano dello stesso tipo.

Per prima cosa includere il namespace Generic.

using System.Collections.Generic; // Tipizzate

Creare una lista con la classe List, seguita dal tipo di dato che s’intende utilizzare.

List<int> Lista = new List<int> { 5, 7, 3, 1 };

Se i valori da inserire al suo interno sono noti possono essere indicati come mostrato dall’esempio precedente. In seguito, un nuovo elemento può essere aggiunto alla lista, in qualsiasi momento, con il metodo .Add().

Lista.Add(4); // Elementi lista: 5 7 3 1 4

Per inserire un elemento in una posizione specifica usare il metodo .Insert() indicando, come argomento, la posizione e il valore da inserire.

Lista.Insert(1, 9); // Elementi lista: 5 9 7 3 1 4

Il metodo .Remove() rimuove l’elemento specificato come parametro, indipendentemente dalla posizione in cui si trova.

Lista.Remove(9); // Elementi lista: 5 7 3 1 4

Per invertire l’ordine degli elementi usare il metodo .Reverse().

Lista.Reverse();// Elementi lista: 4 1 3 7 5

L’ordinamento crescente dei valori presenti nella lista lo si ottiene con il metodo .Sort().

Lista.Sort(); // Elementi lista: 1 3 4 5 7

Per ordinare gli elementi in modo decrescente, dal più grande al più piccolo, chiamare il metodo .Reverse() dopo il metodo .Sort().

Lista.Sort(); // Elementi lista: 1 3 4 5 7
Lista.Reverse(); // Elementi lista: 7 5 4 3 1

Per stampare gli elementi della lista si può usare un ciclo for, come se si trattasse di un array (1), utilizzando la proprietà .Count, per recuperare il numero di elementi presenti nella lista.

for (int i = 0; i < Lista.Count; i++){
 Response.Write(Lista[i].ToString() + " "); // (1)
 Response.Write(Lista.ElementAt(i).ToString() + " "); // (2)
}

In alternativa si può usare il metodo ElementAt(), indicando come argomento la posizione d’indice (2). Come per qualsiasi altra raccolta dati si può usare anche il costrutto foreach.

foreach (int i in Lista){
 Response.Write(i.ToString() + " ");
} 

Gli ArrayList

Gli ArrayList possono contenere una serie di elementi che possono variare sia per numero che per tipo di dato.

Includere il namespace System.Collections.

using System.Collections;

Creare un array di interi e usarlo per popolare velocemente l’ArrayList.

int[] n = { 5, 7, 3, 1 }; 
ArrayList Lista = new ArrayList(n);

La classe ArrayList dispone di numerose proprietà e metodi per manipolare gli elementi della lista. Per inserire un nuovo elemento, anche di tipo diverso da quelli presenti nella lista, usare il metodo Add().

Lista.Add("Quattro"); // Elementi lista: 5 7 3 1 "Quattro"

Nell’esempio viene aggiunta una stringa alla serie di interi contenuti nella lista.

Per inserire un elemento in una posizione specifica usare il metodo Insert(), indicando la posizione e il valore come argomenti.

Lista.Insert(1, 9); // Elementi lista: 5 9 7 3 1 "Quattro"

Per rimuovere un elemento usare il metodo Remove().

Lista.Remove("Quattro"); // Elementi lista: 5 9 7 3 1

Per ordinare gli elementi di una lista si può usare il metodo .Sort() ma solo se gli elementi sono tutti dello stesso tipo. Sort() ordina gli elementi in modo crescente.

Lista.Sort(); // Elementi lista: 1 3 5 7 9

Il metodo Reverse() inverte l’ordine degli elementi e perciò, se usato dopo Sort() restituisce gli elementi della lista ordinati in modo decrescente.

Lista.Reverse(); // Elementi lista: 9 7 5 3 1

Per accedere ai singoli elementi dell’ArrayList usare un ciclo for o il foreach, come mostrato dal seguente esempio.

for (int i = 0; i < Lista.Count; i++){
 Response.Write(Lista[i].ToString() + " "); 
}


foreach (int i in Lista){
 Response.Write(i.ToString() + " ");
}

Altre informazioni su List e ArrayList e altre collection

Per informazioni su altri tipi di collection consultare l’articolo Le collection in C# e ASP.NET.