C# 规范。允许你调用一个函数
void foo(params int[] x)
零参数。但是,我在 C# Lang 中没有找到。规格。关于进一步行为的一句话—— foo 会得到空数组或空引用吗?我还检查了 MSDN——什么都没有。
行为在哪里定义?
注意:我不是在问 VS 的行为方式,而是在问语言的设计。
C# 规范。允许你调用一个函数
void foo(params int[] x)
零参数。但是,我在 C# Lang 中没有找到。规格。关于进一步行为的一句话—— foo 会得到空数组或空引用吗?我还检查了 MSDN——什么都没有。
行为在哪里定义?
注意:我不是在问 VS 的行为方式,而是在问语言的设计。
17.5.1.4 参数数组
参数数组允许在方法调用中以两种方式之一指定参数:
• 为参数数组提供的参数可以是可隐式转换(第 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:
此示例说明了预期的行为:空数组
对于被调用者,它等于void foo(int[] x)
并且传递参数将为您提供一个包含元素n
的数组。n
因此零参数将被转换为 int[0]。