Использование неопределенного количества параметров в 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#)