Array de parametri și cuvântul cheie params
În toate exemplele anterioare am folosit un număr fix de parametri. Totuși, folosind cuvântul cheie params, putem transmite un număr nedefinit de parametri:
void Sum(params int[] numbers)
{
int result = 0;
foreach (var n in numbers)
{
result += n;
}
Console.WriteLine(result);
}
int[] nums = { 1, 2, 3, 4, 5 };
Sum(nums);
Sum(1, 2, 3, 4);
Sum(1, 2, 3);
Sum();
Parametrul cu cuvântul cheie params la definirea metodei trebuie să reprezinte un array unidimensional de tipul de date pe care intenționăm să-l folosim. La apelul metodei, în locul parametrului cu modificatorul params putem transmite atât valori individuale, cât și un array de valori, sau chiar să nu transmitem niciun parametru.
Numărul valorilor transmise în metodă este nedefinit, însă toate aceste valori trebuie să corespundă tipului parametrului cu params.
Dacă trebuie să transmitem și alți parametri, aceștia trebuie specificați înaintea parametrului cu cuvântul cheie params:
void Sum(int initialValue, params int[] numbers)
{
int result = initialValue;
foreach (var n in numbers)
{
result += n;
}
Console.WriteLine(result);
}
int[] nums = { 1, 2, 3, 4, 5 };
Sum(10, nums); // numărul 10 este transmis parametrului initialValue
Sum(1, 2, 3, 4);
Sum(1, 2, 3);
Sum(20);
Aici metoda Sum are un parametru obligatoriu initialValue, deci la apelul metodei trebuie să transmitem o valoare pentru acesta. De aceea, prima valoare la apelul metodei va fi transmisă acestui parametru.
Totuși, după parametrul cu modificatorul params nu putem specifica alți parametri. Deci următoarea definiție a metodei este invalidă:
// Așa NU funcționează
void Sum(params int[] numbers, int initialValue)
{}
Array ca parametru
Această metodă de transmisie a parametrilor trebuie deosebită de transmisia unui array ca parametru:
void Sum(int[] numbers, int initialValue)
{
int result = initialValue;
foreach (var n in numbers)
{
result += n;
}
Console.WriteLine(result);
}
int[] nums = { 1, 2, 3, 4, 5 };
Sum(nums, 10);
// Sum(1, 2, 3, 4); // așa nu se poate - trebuie să transmitem un array
Deoarece metoda Sum primește ca parametru un array fără cuvântul cheie params, la apelul metodei trebuie să transmitem obligatoriu un array ca prim parametru. În plus, spre deosebire de metoda cu parametrul params, după parametrul-array pot fi specificați alți parametri.