如您所知,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 我的实际用例不同,但我认为这个例子不那么复杂。
答案 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类型也是一个数组......