Перейти до основного вмісту

Масив параметрів і ключове слово params

У всіх попередніх прикладах ми використовували фіксовану кількість параметрів. Але, використовуючи ключове слово params, ми можемо передати невизначену кількість параметрів:

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();

Сам параметр з ключовим словом params при визначенні методу повинен представляти одномірний масив того типу, з яким ми збираємося працювати. При виклику методу ми можемо передавати як окремі значення, так і масив значень на місце параметра з модифікатором params, або взагалі не передавати параметри. Кількість значень, переданих методу, невизначена, але всі ці значення повинні відповідати типу параметра з params.

Якщо нам потрібно передати інші параметри, вони повинні бути вказані перед параметром з ключовим словом 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); // число 10 передається в параметр initialValue
Sum(1, 2, 3, 4);
Sum(1, 2, 3);
Sum(20);

Тут метод Sum має обов'язковий параметр initialValue, тому при виклику методу ви повинні передати значення для нього. Отже, перше значення при виклику методу буде передано цьому параметру.

Однак після параметра з модифікатором params ми не можемо вказувати інші параметри. Тобто, наступне визначення методу є недійсним:

// Це НЕ працює
void Sum(params int[] numbers, int initialValue)
{}

Масив як параметр

Також цей спосіб передачі параметрів потрібно відрізняти від передачі масиву як параметра:

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); // так не можна - потрібно передати масив.

Оскільки метод Sum приймає масив без ключового слова params як параметр, ми повинні передати масив як перший параметр при виклику. Крім того, на відміну від методу з параметром params, інші параметри можуть бути розміщені після параметра масиву.