Передача нулевых аргументов как параметрические усилители — где поведение определяется?

Спецификация C#. позволяет Вам вызывать функцию

void foo(params int[] x)

с нулевыми параметрами. Однако я не нашел в Lang C#. Спецификация. слово на дальнейшем поведении - нечто получит пустой массив или нулевую ссылку? Я проверил также MSDN - ничто.

Где поведение определяется?

Примечание: Я не спрашиваю, как VS ведет себя, я спрашиваю о дизайне языка.

17
задан greenoldman 31 May 2010 в 07:38
поделиться

3 ответа

Раздел 7.4.1 Спецификации языка C # (ссылка: Спецификация C # 3.0 )

В частности, обратите внимание, что пустой массив создается, когда есть ноль аргументы, указанные для параметра множество.

Это последняя строка раздела

27
ответ дан 30 November 2019 в 11:26
поделиться

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:

Этот пример иллюстрирует ожидаемое поведение: пустой массив

13
ответ дан 30 November 2019 в 11:26
поделиться

Для вызывающего это равно void foo(int[] x) и передача n параметров даст вам массив с n элементами. То есть нулевые параметры будут переведены в int[0].

0
ответ дан 30 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: