多个" params"参数可能吗?

时间:2012-08-07 03:09:34

标签: c# parameters params

C#中可能有多个params参数吗?像这样:

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

但我不确定这是否可行。如果是,编译器将如何决定在哪里拆分参数?

7 个答案:

答案 0 :(得分:34)

你只能有一个参数。您可以有两个数组参数,调用者可以使用数组初始值设定项来调用您的方法,但只能有一个参数参数。

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

...

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

答案 1 :(得分:31)

不,这是不可能的。拿这个:

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)

答案 2 :(得分:12)

来自MSDN - params

  

a中的params关键字后不允许使用其他参数   方法声明,并且只允许一个params关键字   方法声明。

答案 3 :(得分:7)

我知道这是一篇超级老帖,但是在这里:

在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];,但这确实是一个很小的问题。此外,如果你真的想,你可以做一些扩展或功能将它们转换为数组,虽然我认为这不值得。

答案 4 :(得分:5)

不,只允许一个参数,甚至必须是最后一个参数。阅读this

这将有效

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

但这不起作用

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

答案 5 :(得分:0)

这是不可能的。每个方法声明只能有一个params关键字 - 来自MSDN - http://msdn.microsoft.com/en-us/library/w5zay9db(v=vs.71).aspx

答案 6 :(得分:-1)

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


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