Возможно ли иметь несколько параметров params
в С#? Что-то вроде этого:
void foobar(params int[] foo, params string[] bar)
Но я не уверен, что это возможно. Если да, то как компилятор решит, где разделить аргументы?
Возможно ли иметь несколько параметров params
в С#? Что-то вроде этого:
void foobar(params int[] foo, params string[] bar)
Но я не уверен, что это возможно. Если да, то как компилятор решит, где разделить аргументы?
<IEnum<IEnum>>
07.08.2012 У вас может быть только один аргумент params. У вас может быть два аргумента массива, и вызывающая сторона может использовать инициализаторы массива для вызова вашего метода, но может быть только один аргумент params.
void foobar(int[] foo, string[] bar)
...
foobar(new[] { 1, 2, 3 }, new[] { "a", "b", "c" });
Нет, это невозможно. Возьми это:
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)
Я знаю, что это супер старый пост, но вот:
В C# 7 это действительно возможно. Вы можете использовать System.ValueTuple
для этого:
private void Foorbar(params (int Foo, string Bar)[] foobars)
{
foreach (var foobar in foobars)
Console.WriteLine($"foo: {foobar.Foo}, bar: {foobar.Bar}");
}
И тогда вы можете использовать его следующим образом:
private void Main() => Foobar((3, "oo"), (6, "bar"), (7, baz));
И очевидный вывод:
Foo: 3, Bar: foo
Foo: 6, Bar: bar
Foo: 7, Bar: baz
Единственным недостатком является то, что вы должны сделать это: foobars[0].foo;
вместо foos[0];
, но это действительно крошечная проблема. Кроме того, если вы действительно хотите, вы можете сделать какое-то расширение или функцию для преобразования их в массивы, хотя я не думаю, что это того стоит.
Никакие дополнительные параметры не допускаются после ключевого слова params в объявлении метода, и разрешено только одно ключевое слово params в объявлении метода.
Нет, разрешен только один параметр, и даже он должен быть последним аргументом. Прочтите это
Это будет работать
public void Correct(int i, params string[] parg) { ... }
Но это не сработает
public void Correct(params string[] parg, int i) { ... }
Это невозможно. Это может быть только одно ключевое слово params для каждого объявления метода - из MSDN - http://msdn.microsoft.com/en-us/library/w5zay9db(v=vs.71).aspx