Elementor Header #8

42. Методы с переменным количеством параметров

1. Введение

В C# можно передавать переменное количество параметров в метод с помощью ключевого слова params. Это удобно, когда заранее неизвестно количество аргументов, которые нужно передать в метод.

Простой пример:

				
					static void PrintNumbers(params int[] numbers)
{
    foreach (int num in numbers)
        Console.WriteLine(num);
}

PrintNumbers(1, 2, 3, 4, 5); // Выведет 1 2 3 4 5

				
			

2. Синтаксис метода с переменным числом параметров

				
					static void MethodName(params <тип>[] <имя_массива>)
{
    // Тело метода
}

				
			

Правила использования params:

  1. Должен быть массив (params int[], params string[] и т. д.)
  2. params-параметр должен быть последним в списке аргументов
  3. Может быть только один params-параметр в методе

Пример:

				
					static void PrintMessages(string header, params string[] messages)
{
    Console.WriteLine(header);
    foreach (string message in messages)
        Console.WriteLine($"- {message}");
}

				
			

Вызов:

				
					PrintMessages("Список дел:", "Купить хлеб", "Позвонить другу", "Написать код");

				
			

Вывод:

				
					Список дел:
- Купить хлеб
- Позвонить другу
- Написать код

				
			

3. Использование типов, отличных от int[]

3.1. Передача строк

				
					static void PrintNames(params string[] names)
{
    foreach (string name in names)
        Console.WriteLine($"Привет, {name}!");
}

				
			

Вызов:

				
					PrintNames("Алиса", "Боб", "Чарли");

				
			

Вывод:

				
					Привет, Алиса!
Привет, Боб!
Привет, Чарли!

				
			

3.2. Передача объектов

				
					static void PrintObjects(params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(item);
}

				
			

Вызов:

				
					PrintObjects(1, "Hello", 3.14, true);

				
			

Вывод:

				
					1
Hello
3.14
True

				
			

4. Передача массива в params

Если у нас уже есть массив, можно передать его в метод с params:

				
					int[] numbers = { 10, 20, 30 };
PrintNumbers(numbers);

				
			

или передача отдельных значений:

				
					PrintNumbers(10, 20, 30);

				
			

5. Совмещение params с обычными параметрами

				
					static void ShowInfo(string title, params string[] items)
{
    Console.WriteLine($"=== {title} ===");
    foreach (string item in items)
        Console.WriteLine(item);
}

				
			

Вызов:

				
					ShowInfo("Список покупок", "Молоко", "Хлеб", "Яблоки");

				
			

Вывод:

				
					=== Список покупок ===
Молоко
Хлеб
Яблоки

				
			

Заключение

  • params позволяет передавать переменное количество аргументов в метод.
  • Можно передавать числа, строки, объекты и другие типы данных.
  • Метод с params может принимать другие аргументы, но params всегда должен быть последним.
  • Можно передавать либо отдельные значения, либо массив.
  • Это удобно для работы с динамическими данными, где заранее неизвестно количество входных аргументов.

Тестовое задание

Задание:

  1. Напишите метод SumAll, который принимает переменное количество чисел и возвращает их сумму.
  2. Напишите метод JoinStrings, который объединяет переменное количество строк в одну строку через пробел.
  3. Вызовите оба метода и выведите результаты в консоль.

Пример решения:

				
					using System;

class Program
{
    static int SumAll(params int[] numbers)
    {
        int sum = 0;
        foreach (int num in numbers)
            sum += num;
        return sum;
    }

    static string JoinStrings(params string[] words)
    {
        return string.Join(" ", words);
    }

    static void Main()
    {
        Console.WriteLine(SumAll(1, 2, 3, 4, 5)); // 15
        Console.WriteLine(JoinStrings("Hello", "world", "!")); // "Hello world !"
    }
}

				
			

Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.

logo