Использование неопределенного количества параметров в C# и Java

Обновлен: Ноябрь 2007

C# позволяет передавать методу переменное количество параметров путем указания ключевого слова params при объявлении метода. Список аргументов также может содержать регулярные параметры, однако параметр, объявленный с помощью ключевого слова params, должен быть последним в списке. Он имеет форму массива переменной длины, и в методе может быть только один параметр params.

Когда компилятор пытается разрешить вызов метода, он выполняет поиск метода, список аргументов которого соответствует вызываемому методу. Если не удается найти перегрузку метода с соответствующим списком аргументов, но имеется подходящая версия с параметром params нужного типа, выполняется вызов этого метода с добавлением в массив дополнительных аргументов.

Этот принцип продемонстрирован в приведенном ниже примере.

class TestParams
{
    private static void Average(string title, params int[] values)
    {
        int sum = 0;
        System.Console.Write("Average of {0} (", title);

        for (int i = 0; i < values.Length; i++)
        {
            sum += values[i];
            System.Console.Write(values[i] + ", ");
        }
        System.Console.WriteLine("): {0}", (float)sum/values.Length);
    }
    static void Main()
    {
        Average ("List One", 5, 10, 15);
        Average ("List Two", 5, 10, 15, 20, 25, 30);
    }
}

В приведенном примере метод Average объявляется при помощи параметра params целочисленного массива, что позволяет вызывать этот метод с любым количеством аргументов. Результат получается следующим:

Average of List One (5, 10, 15, ): 10

Average of List Two (5, 10, 15, 20, 25, 30, ): 17.5

Для разрешения неопределенного количества параметров разного типа можно задать параметр params типа Object.

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Передача массивов в качестве параметров (руководство по программированию на C#)

Другие ресурсы

Язык программирования C# для разработчиков на Java