Спецификация C#. позволяет Вам вызывать функцию
void foo(params int[] x)
с нулевыми параметрами. Однако я не нашел в Lang C#. Спецификация. слово на дальнейшем поведении - нечто получит пустой массив или нулевую ссылку? Я проверил также MSDN - ничто.
Где поведение определяется?
Примечание: Я не спрашиваю, как VS ведет себя, я спрашиваю о дизайне языка.
Раздел 7.4.1 Спецификации языка C # (ссылка: Спецификация C # 3.0 )
В частности, обратите внимание, что пустой массив создается, когда есть ноль аргументы, указанные для параметра множество.
Это последняя строка раздела
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].