C#中可能有多个params
参数吗?像这样:
void foobar(params int[] foo, params string[] bar)
但我不确定这是否可行。如果是,编译器将如何决定在哪里拆分参数?
答案 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)
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"})