C # - Возможно ли иметь нулевые параметры? - PullRequest
50 голосов
/ 05 июля 2011
public void Foo(params string[] values)
{
}

Возможно ли, что values может когда-либо быть null, или он всегда будет установлен с 0 или более пунктов?

Ответы [ 4 ]

65 голосов
/ 05 июля 2011

Абсолютно - вы можете вызвать его с аргументом типа string [] со значением null:

string[] array = null;
Foo(array);
36 голосов
/ 05 июля 2011

Я решил написать некоторый код, чтобы проверить это для себя.Используя следующую программу:

using System;

namespace TestParams
{
    class Program
    {
        static void TestParamsStrings(params string[] strings)
        {
            if(strings == null)
            {
                Console.WriteLine("strings is null.");
            }
            else
            {
                Console.WriteLine("strings is not null.");
            }
        }

        static void TestParamsInts(params int[] ints)
        {
            if (ints == null)
            {
                Console.WriteLine("ints is null.");
            }
            else
            {
                Console.WriteLine("ints is not null.");
            } 
        }

        static void Main(string[] args)
        {
            string[] stringArray = null;

            TestParamsStrings(stringArray);
            TestParamsStrings();
            TestParamsStrings(null);
            TestParamsStrings(null, null);

            Console.WriteLine("-------");

            int[] intArray = null;

            TestParamsInts(intArray);
            TestParamsInts();
            TestParamsInts(null);
            //TestParamsInts(null, null); -- Does not compile.
        }
    }
}

Получены следующие результаты:

strings is null.
strings is not null.
strings is null.
strings is not null.
-------
ints is null.
ints is not null.
ints is null.

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

4 голосов
/ 12 декабря 2013

Моим первым предположением было объявить параметр со значением по умолчанию, равным null, что в некоторых случаях имело бы смысл, но язык c # не позволяет этого.

static void Test(params object[] values = null) // does not compile
{
}

ошибка CS1751: невозможно указать значение по умолчанию для массива параметров

Способ обойти это ограничение путем явной передачи значения null уже получен.

3 голосов
/ 05 июля 2011

В дополнение к ответу Джона у вас может быть что-то вроде этого:

string[] array1 = new string[]; //array is not null, but empty
Foo(array1);
string[] array2 = new string[] {null, null}; //array has two items: 2 null strings
Foo(array2);
...