Чи існує C # альтернатива параметрам vararg Java?


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як посилання на масив або як один елемент масиву. (Я думаю, що компілятор створює масив лише в тому випадку, якщо це потрібно, але я схильний писати код, який уникає того, щоб я про це пам'ятав.)


+1, хоча я б зазначив, що (як і майже будь-яка інша мовна функція), цим не слід зловживати.
Федеріко Берасатегі

16
@HighCore: Якщо ви збираєтеся згадувати про майже будь-яку іншу мовну функцію, це, мабуть, не варто згадувати :)
Джон Скіт,

2
@hvd: Враховуючи те, що OP здається новачком, я б не хотів тут вдаватися до іменованих аргументів, необов’язкових параметрів тощо. Я бачу сенс, який ти намагаєшся зробити, але я думаю, що це додало б більше плутанини, ніж світла в даний момент.
Джон Скіт

37

Подивіться на параметри (C # Reference)

Ключове слово 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.