Підрозділ 2.20
Масив параметрів та ключове слово params
Пояснює масив параметрів params, передачу довільної кількості аргументів і роботу з масивами як параметрами методів.
2.20. Масив параметрів та ключове слово params
Усі методи, розглянуті раніше, мали фіксовану кількість параметрів — кожен виклик передавав рівно стільки аргументів, скільки оголошено у сигнатурі. Але іноді кількість вхідних даних заздалегідь невідома: метод для логування показників може отримати одне значення або десять, метод агрегації — будь-яку кількість чисел. Ключове слово params вирішує цю задачу, дозволяючи приймати змінну кількість аргументів одного типу.
Синтаксис params
Параметр із ключовим словом params оголошується як одновимірний масив. При виклику методу на його місці можна передати довільну кількість значень через кому, готовий масив, або взагалі нічого:
Незалежно від способу виклику, всередині методу values — це звичайний масив double[]. Можна звертатись до values.Length, ітерувати через foreach, звертатись за індексом. Якщо аргументів не передано — values.Length дорівнює нулю, і метод коректно обробляє порожній випадок.

Комбінування з іншими параметрами
Параметр params може бути не єдиним у методі. Допускається передувати йому будь-яка кількість звичайних параметрів. Вони заповнюються першими, а все що залишається потрапляє до params-масиву:
Перші два аргументи (label і unit) — обов'язкові фіксовані параметри, вони завжди присутні при виклику. Все що йде після них — збирається у масив values. Якщо після фіксованих параметрів нічого не передано, values буде порожнім масивом.
Важливе обмеження: params-параметр завжди останній у списку. Розмістити після нього будь-які інші параметри — помилка компіляції, бо компілятор не зможе відрізнити де закінчуються значення для params і починаються наступні параметри:
// ПОМИЛКА — params не може стояти не останнім
void Log(params double[] values, string label)
{
}Передача готового масиву
Замість переліку окремих значень через кому, на місце params-параметра можна передати вже готовий масив. Метод не робить різниці між цими двома способами виклику:
Обидва виклики абсолютно еквівалентні — з точки зору методу він завжди отримує double[].
Масив як звичайний параметр — відмінність від params
Параметр-масив без ключового слова params — це зовсім інша конструкція. Він вимагає явно передавати масив, і не дозволяє записувати окремі значення через кому:
На відміну від params, після звичайного масиву-параметра можуть стояти інші параметри — компілятор точно знає, де закінчується масив (він завжди один об'єкт), і може прийняти наступний аргумент.

Вибір між params і звичайним масивом залежить від сценарію: params зручний у публічному API де викликаючий код не хоче щоразу створювати масив; звичайний масив-параметр кращий коли дані вже зібрані в колекцію і потрібно мати після нього ще інші параметри.