8

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

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

然后可以使用您喜欢的任意数量的参数调用它:

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

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

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

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

4

5 回答 5

15

您的方法需要返回类型:

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

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

int[] xs = new[] { 1, 2, 3 };
var result = Add(xs);
于 2013-02-20T15:30:02.937 回答
2

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

Add(1, 2, 3);

它应该将其转换为

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

因此,要从您的代码中执行此操作,您无需执行任何特殊操作。

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

有关更多详细信息,请参阅文档

于 2013-02-20T15:33:34.283 回答
0

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

Add(xs);

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

于 2013-02-20T15:30:19.270 回答
0
static void Main(string[] args)
{
    int[] tmp =  {1, 2};
    var sum = Add(tmp);
}
public static int Add(params int[] xs)
{
    return xs.Sum();
}

应该可以正常工作..

于 2013-02-20T15:31:41.733 回答
0

如果它与 Java 类似,则可以将数组作为参数调用该方法。

此功能也是使可变参数变得危险的原因,尤其是如果可变参数类型之一也是数组时...

于 2013-02-20T15:34:14.813 回答