2010-01-03 12 views
44

C'è un modo per impostare una funzione C# per accettare un numero qualsiasi di parametri? Ad esempio, si potrebbe impostare una funzione tale che la seguente tutti i lavori -Passa più parametri facoltativi a una funzione C#

x = AddUp(2, 3) 

x = AddUp(5, 7, 8, 2) 

x = AddUp(43, 545, 23, 656, 23, 64, 234, 44) 

risposta

113

utilizzare un array parametro con la params modificatore:

public static int AddUp(params int[] values) 
{ 
    int sum = 0; 
    foreach (int value in values) 
    { 
     sum += value; 
    } 
    return sum; 
} 

Se si vuole fare in modo che ci sia almeno uno valore (piuttosto che una matrice può essere vuoto) quindi specificare che separatamente:

public static int AddUp(int firstValue, params int[] values) 

(Impostare sum a firstValue per iniziare con l'implementazione.)

Si noti che è necessario controllare il riferimento dell'array per nullità nel modo normale. All'interno del metodo, il parametro è un array perfettamente ordinario. Il modificatore della serie di parametri fa la differenza quando si chiama il metodo. Fondamentalmente il compilatore trasforma:

int x = AddUp(4, 5, 6); 

in qualcosa di simile:

int[] tmp = new int[] { 4, 5, 6 }; 
int x = AddUp(tmp); 

È possibile chiama con un allineamento perfettamente normale anche se - in modo da quest'ultimo sintassi è valida nel codice sorgente pure.

+0

Bello, grazie Jon! –

+0

In 'public static int AddUp (parametri int [] valori)' i 'valori' saranno sempre di tipo' T [] '? Non può essere di tipo 'params IEnumerable values' o' params List values'. Ho provato a usare i valori di 'params IEnumerable ' ma mi ha dato un errore, che è stato successivamente risolto usando' params IEnumerable [] values'. Perchè così? – barnes

+1

@barnes: 'params' funziona solo per i tipi di array (al momento ci sono state proposte per consentire altri tipi). Quasi certamente * non * vuoi 'params IEnumerable []' in quanto sarebbe un array di sequenze. –

4

C# 4.0 supporta anche i parametri opzionali, che potrebbero essere utili in alcune altre situazioni. Vedi articolo this.

Problemi correlati