Есть ли альтернатива C # параметрам Java vararg?


93

Я работал над Java и новичок в технологии .Net

Можно ли объявить в C # функцию, принимающую переменные входные параметры

Есть ли какой-либо синтаксис C #, похожий на следующий синтаксис Java?

void f1(String... a)

2
Если какой-либо из приведенных ниже ответов дает ответ на ваш вопрос, как работает Stack Overflow, вы должны «принять» ответ, нажав на галочку рядом с ним; подробности здесь .
— TJ Crowder

Ответы:


150

Да, в C # есть эквивалент параметров varargs. Они называются массивами параметров и вводятся с paramsмодификатором:

public void Foo(int x, params string[] values)

Затем вызовите его с помощью:

Foo(10, "hello", "there");

Как и в случае с Java, это только последний параметр, который может изменяться следующим образом. Обратите внимание, что (как и в случае с Java) параметр params object[] objectsможет легко вызвать путаницу, поскольку вам нужно помнить, предназначен ли один аргумент типа object[]для повторного обертывания или нет. Точно так же для любого типа, допускающего значение NULL, вам нужно помнить, будет ли один аргумент nullобрабатываться как ссылка на массив или как отдельный элемент массива. (Я думаю, что компилятор создает массив только в случае необходимости, но я стараюсь писать код, который избавляет меня от необходимости помнить об этом.)


+1, хотя я хотел бы упомянуть, что (как и практически любой другой языковой функцией), этим нельзя злоупотреблять.
— Федерико Берасатеги,

16
@HighCore: Если вы собираетесь упомянуть это практически о любой другой языковой функции, вероятно, об этом не стоит упоминать :)
— Джон Скит,

2
@hvd: Учитывая, что OP кажется новичком, я бы предпочел не вдаваться в именованные аргументы, дополнительные параметры и т. д. здесь. Я понимаю, что вы пытаетесь донести, но думаю, что в данный момент это добавит больше путаницы, чем света.
— Джон Скит,

37

Взгляните на параметры (Справочник по C #)

Ключевое слово params позволяет указать параметр метода, который принимает переменное количество аргументов.

Вы можете отправить разделенный запятыми список аргументов типа, указанного в объявлении параметра, или массив аргументов указанного типа. Вы также можете не отправлять аргументы.

Никакие дополнительные параметры не допускаются после ключевого слова params в объявлении метода, и только одно ключевое слово params разрешено в объявлении метода.

Как показано в примере, метод объявлен как

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

и используется как

UseParams(1, 2, 3, 4);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.