gar*_*hao 28 c# parameters params
params在C#中可以有多个参数吗?像这样的东西:
void foobar(params int[] foo, params string[] bar)
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否可行.如果是,编译器将如何决定在哪里拆分参数?
Sam*_*eff 38
你只能有一个参数.您可以有两个数组参数,调用者可以使用数组初始化程序来调用您的方法,但只能有一个params参数.
void foobar(int[] foo, string[] bar)
...
foobar(new {1, 2,3}, new {"a", "b", "c"});
Run Code Online (Sandbox Code Playgroud)
Col*_*son 33
不,这是不可能的.拿着这个:
void Mult(params int[] arg1, params long[] arg2)
Run Code Online (Sandbox Code Playgroud)
编译器应该如何解释这个:
Mult(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
它可以被解读为以下任何一个:
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[] { });
Run Code Online (Sandbox Code Playgroud)
你可以将两个数组作为这样的参数:
void Mult(int[] arg1, params long[] arg2)
Run Code Online (Sandbox Code Playgroud)
Aus*_*yan 11
我知道这是一个非常老的帖子,但是在这里:
在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}");
}
Run Code Online (Sandbox Code Playgroud)
然后您可以像这样使用它:
private void Main() => Foobar((3, "oo"), (6, "bar"), (7, baz));
Run Code Online (Sandbox Code Playgroud)
和明显的输出:
Foo: 3, Bar: foo
Foo: 6, Bar: bar
Foo: 7, Bar: baz
Run Code Online (Sandbox Code Playgroud)
唯一的缺点是您必须这样做:foobars[0].foo;而不是foos[0];,但这确实是一个很小的小问题。此外,如果您确实愿意,可以进行一些扩展或函数以将它们转换为数组,尽管我认为这样做并不值得。
不可以,只允许使用一个参数,甚至必须是最后一个参数。读这个
这会起作用
public void Correct(int i, params string[] parg) { ... }
Run Code Online (Sandbox Code Playgroud)
但这行不通
public void Correct(params string[] parg, int i) { ... }
Run Code Online (Sandbox Code Playgroud)