将数组解包为方法参数

本文关键字:方法 参数 数组 | 更新日期: 2023-09-27 18:00:14

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

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

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

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

但是假设我想使用ints1的数组来调用Add。这可能吗?如何做到(最好不要反思)?我尝试了以下操作,但他们给出了语法错误(语法纯粹是猜测):

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

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

将数组解包为方法参数

您的方法需要一个返回类型:

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

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

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

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

Add(1, 2, 3);

它应该将其转换为

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

因此,要从代码中做到这一点,您不必做任何特别的事情。

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

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

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

Add(xs);

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

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

应该还可以。。

如果它与Java有任何相似之处,那么只需将数组作为参数来调用该方法。

这个特性也使varargs变得危险,特别是如果其中一个vararg类型也是数组。。。