Gli array sono immutabili; ciò significa che dopo che un array viene istanziato staticamente:

int[] ar=new int[2];
int[] ar2=new int[]{1,4,6,2,3};

esso non può cambiare dimensione, a meno dell'uso di questo metodo:
Array.Resize(ref ar,10);

che non fa altro che assegnare un nuovo array di dimensione 10 al riferimento precedente (copiando ovviamente tutti i valori contenuti).
La funzione Resize non è l'unica funzione interessante della classe Array, infatti abbiamo:

  • AsReadOnly => restituisce un array di sola lettura (questo non significa che i singoli elementi sono in sola lettura, ma che l'array non può essere modificato).
  • ConstrainedCopy => è un metodo di copia, ma in caso di eccezioni, il processo può subire rollback e portare tutto in uno stato consistente.
  • ConvertAll => è un metodo generic per convertire l'array in un array di un tipo specificato. L'array risultato sarà del tipo destinazione.
  • ForEach => è un metodo generic che esegue la Action<T> per ogni elemento dell'array specificato in parametro.
  • TrueForAll => è un metodo che torna true se il predicato passato come parametro è valutato positivamente per ogni elemento dell'array.

Una property interessante di un qualsiasi array è la SyncRoot. Essa server per fare il lock sull'array, siccome di default gli array non sono thread-safe, perciò:

lock(ar.SyncRoot) { //codice }

porta a preservare integrità in caso di race conditions.

Params
Params è una parola chiave che, nell signature di un metodo, sta ad indicare "questo parametro può in realtà essere, dalla prospettiva del chiamante, da 1 a N parametri successivi" dove N è la dimensione della struttura che segue la parola params. Sotto un esempio:

void Caller()
{
    Called(1); //valida, utilizza solo il primo parametro
    Called(1, 2); //manda un array di un elemento (2) al chiamato
    Called(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
    Called(1, new int[] { 10, 20, 30 }); //posso passare direttamente un array
}
void Called(int a, params int[] array) { }
void Called2(params int[] array, int a) { //errata, params deve essere l'ultimo parametro }