params
C#中可以有多个参数吗?像这样的东西:
void foobar(params int[] foo, params string[] bar)
但我不确定这是否可能。如果是,编译器将如何决定在哪里拆分参数?
params
C#中可以有多个参数吗?像这样的东西:
void foobar(params int[] foo, params string[] bar)
但我不确定这是否可能。如果是,编译器将如何决定在哪里拆分参数?
你只能有一个 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)
I know this is a super old post, but here:
In C# 7, you actually can. You can use System.ValueTuple
to do this:
private void Foobar(params (int Foo, string Bar)[] foobars)
{
foreach (var foobar in foobars)
Console.WriteLine($"foo: {foobar.Foo}, bar: {foobar.Bar}");
}
And then you can use it like this:
private void Main() => Foobar((3, "oo"), (6, "bar"), (7, "baz"));
And the obvious output:
Foo: 3, Bar: foo
Foo: 6, Bar: bar
Foo: 7, Bar: baz
The only downside is you have to do this: foobars[0].foo;
instead of foos[0];
, but that's really a tiny tiny issue. Besides, if you really wanted to, you could make some extension or function to convert them to arrays, though I don't think that's really worth it.
方法声明中 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
void useMultipleParams(int[] foo, string[] bar)
{
}
useMultipleParams(new int[]{1,2}, new string[] {"1","2"})