C#规范。允许你调用函数
void foo(params int[] x)
零参数。但是,我没有在C#Lang中找到。规格。关于进一步行为的一个词 - 将foo获取空数组或空引用?我也检查了MSDN - 什么都没有。
定义行为的地方?
注意:我不是在询问VS的行为方式,我在询问该语言的设计。
答案 0 :(得分:25)
答案 1 :(得分:13)
17.5.1.4参数数组
参数数组允许参数 用a中的两种方式之一指定 方法调用:
•争论 给出一个参数数组可以是一个 单个表达式的类型 隐式可兑换(§13.1)到 参数数组类型。在这种情况下, 参数数组精确地起作用 像一个值参数。
或者,调用可以 指定零个或多个参数 参数数组,其中每个参数 是一种类型的表达式 隐式可兑换(§13.1)到 参数数组的元素类型。 在这种情况下,调用创建 参数数组的一个实例 类型的长度对应于 参数的数量,初始化 数组实例的元素 使用给定的参数值,和 使用新创建的数组实例 作为实际的论点。
在同一部分中给出了一个例子:
using System;
class Test
{
static void F(params int[] args) {
Console.Write("Array contains {0} elements:", args.Length);
foreach (int i in args)
Console.Write(" {0}", i);
Console.WriteLine();
}
static void Main() {
int[] arr = {1, 2, 3};
F(arr);
F(10, 20, 30, 40);
F();
}
}
产生输出
Array contains 3 elements: 1 2 3 Array
contains 4 elements: 10 20 30 40 Array
contains 0 elements:
此示例说明了预期的行为:空数组
答案 2 :(得分:0)
对于被调用者,它等于void foo(int[] x)
,并且传递n
参数将为您提供具有n
元素的数组。所以零参数将被转换为int [0]。