通过参数将数组作为多个参数传递

时间:2020-02-18 18:27:40

标签: c# parameters

如果我有这样的方法:

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());

但是我想知道是否有更好的方法

2 个答案:

答案 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());