Подтвердить что ты не робот

Возможны ли множественные параметры "params"?

Возможно ли иметь несколько параметров params в С#? Что-то вроде этого:

void foobar(params int[] foo, params string[] bar)

Но я не уверен, что это возможно. Если да, то каким образом компилятор решит, где разделить аргументы?

4b9b3361

Ответ 1

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

void foobar(int[] foo, string[] bar)

...

foobar(new {1, 2,3}, new {"a", "b", "c"});

Ответ 2

Нет, это невозможно. Возьмите это:

void Mult(params int[] arg1, params long[] arg2)

как должен интерпретировать этот компилятор:

Mult(1, 2, 3);

Он может быть прочитан как любой из них:

Mult(new int[] {         }, new long[] { 1, 2, 3 });
Mult(new int[] { 1       }, new long[] {    2, 3 });
Mult(new int[] { 1, 2    }, new long[] {       3 });
Mult(new int[] { 1, 2, 3 }, new long[] {         });

Вы можете взять два массива в качестве таких параметров, как это:

void Mult(int[] arg1, params long[] arg2)

Ответ 3

Из MSDN - параметры

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

Ответ 4

Нет, допускается только один параметр, и даже это должен быть последний аргумент. Прочитайте this

Это будет работать

public void Correct(int i, params string[] parg)
{}

Но это не сработает

public void Correct(params string[] parg, int i)
{}

Ответ 6

void useMultipleParams(int[] foo, string[] bar)
{
}


useMultipleParams(new int[]{1,2}, new string[] {"1","2"})