如果我有这样的方法:
Foo(params string[] parameters)
我想在单个调用中同时传递“常规参数”和数组:
string[] myArray = new[] { "param3", "param4" };
Foo("param1", "param2", myArray);
等价于此:
Foo("param1", "param2", "param3", "param4");
是否存在可以在数组上调用的函数或可以修改Foo
方法的某种方式?目前,我正在执行以下操作:
string[] myArray = new[] { "param3", "param4" };
List<string> arguments = new List<string>
{
"param1",
"param2"
};
arguments.AddRange(myArray);
Foo(arguments.ToArray());
但是我想知道是否有更好的方法
答案 0 :(得分:2)
如果通过“常规”参数来表示带有名称的单独定义的参数,并且希望它们是可选的,那么我们可以使用默认值来定义它们。然后,我们可以将最后一个定义为params
数组(也可以为null或为空):
public static void Foo(string first = null, string second = null, params string[] others)
现在,我们可以按照您所描述的那样调用方法(前两个参数是可选的,其后是params数组中的零至多个字符串参数):
Foo();
Foo("param1");
Foo("param1", "param2");
Foo("param1", "param2", "param3");
Foo("param1", "param2", "param3", "param4"); // etc...
// Or call it with two regular arguments and an array
var myArray = new[] {"param3", "param4"};
Foo("param1", "param2", myArray);
在这种情况下,我们不能做的一件事就是只传入一个数组,或者只传入一个字符串和一个数组,除非我们使用命名参数语法:
Foo("param1", others:myArray); // Don't have to name the first one if we place it first
Foo(second:"param2", others:myArray);
Foo(others:myArray);
答案 1 :(得分:2)
传递所有参数的一种简洁方法如下:
string[] myArray = new[] { "param3", "param4" };
Foo(new[] { "param1", "param2" }.Concat(myArray).ToArray());