我很好奇,希望有人能对此有所了解——但为什么采用“参数”的 C# 函数必须是一个数组?
我知道参数列表中的对象被输入了一个数组,但是如果有人想要创建一个可变参数函数来接收未定义数量的数组对象怎么办?
以这个函数为例...
private Int32 Sum(params Int32[] numbers)
{
return numbers.Sum(); // Using LINQ here to sum
}
很简单,它可以接受不同数量的数字 - 例如......
Int32 x = Sum(1);
Int32 y = Sum(1, 2);
Int32 z = Sum(1, 2, 3);
现在假设我想创建一个函数,它接收不同数量的整数数组并对所有数字求和。据我所知,我将不得不考虑拳击......
private Int32 SumArrays(params Object[] numbers)
{
Int32 total = 0;
foreach (Object o in numbers)
{
Int32[] array = (Int32[])o;
total += array.Sum();
}
return total;
}
然后可以像...一样使用
Int32[] arr1 = new Int32[] { 1, 2, 3 };
Int32[] arr2 = new Int32[] { 1, 2, 3, 4 };
Int32[] arr3 = new Int32[] { 1, 2, 3, 4, 5 };
Int32 x = SumArrays((Object)arr1, (Object)arr2);
Int32 y = SumArrays((Object)arr1, (Object)arr2, (Object)arr3);
这背后的原因是什么?为什么这不是作为一个单一的非数组变量实现的?比如params Int32
?