如您所知,C#通过params
关键字支持可变方法:
int Add(params int[] xs) {
return xs.Sum();
}
然后可以用任意数量的参数调用:
Add(1);
Add(1, 2);
Add(1, 2, 3);
但是假设我想使用int
s1的数组来调用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类型也是数组。。。