将数组解压缩为方法参数

时间:2013-02-20 15:27:02

标签: c# arrays syntax variadic-functions params-keyword

如您所知,C#通过params关键字支持可变方法:

int Add(params int[] xs) {
    return xs.Sum();
}

然后可以使用任意数量的参数调用它们:

Add(1);
Add(1, 2);
Add(1, 2, 3);

但是说我想使用Add s 1 的数组来调用int。这是可能的以及如何(最好没有反思)?我尝试了以下但是他们给出了语法错误(语法纯粹是猜测):

var xs = new[] { 1, 2, 3 };
Add(xs...); // doesn't work; syntax error
Add(params xs); // doesn't work; syntax error

1 我的实际用例不同,但我认为这个例子不那么复杂。

5 个答案:

答案 0 :(得分:10)

您的方法需要返回类型:

int Add(params int[] xs) {
    return xs.Sum();
}

要使用数组调用它,只需使用普通语法进行方法调用:

int[] xs = new[] { 1, 2, 3 };
var result = Add(xs);

答案 1 :(得分:2)

params关键字基本上只允许您利用一点语法糖。它告诉编译器何时看到

Add(1, 2, 3);

它应该将其转换为

Add(new int[] { 1, 2, 3});

因此,要从代码中执行此操作,您不必执行任何特殊操作。

 int[] parameters = new int[] { ... }
 results = Add(parameters);

有关详细信息,请参阅the documentation

答案 2 :(得分:0)

据我所知,您可以像使用常规方法一样使用数组调用它:

Add(xs);

没有什么花哨的,方法调用上没有params关键字,没有点。

答案 3 :(得分:0)

static void Main(string[] args)
{
    int[] tmp =  {1, 2};
    var sum = Add(tmp);
}
public static int Add(params int[] xs)
{
    return xs.Sum();
}

应该工作得很好......

答案 4 :(得分:0)

如果它像Java一样,你可以用数组作为参数调用方法。

此功能也是使varargs危险的原因,特别是如果其中一个vararg类型也是一个数组......

相关问题