C# - Is it possible to have null params?

风格不统一 提交于 2019-11-30 16:46:39

Absolutely - you can call it with an argument of type string[] with a value of null:

string[] array = null;
Foo(array);

I decided to write some code up to test this for myself. Using the following program:

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.
        }
    }
}

The following results are yielded:

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

So yes, it is entirely possible for the array associated with params to be null.

My first guess was to declare the parameter with default value of null, which would make sense in some cases, but the c# language does not allow this.

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

error CS1751: Cannot specify a default value for a parameter array

The way of getting around this limitation by explicitly passing null was already answered.

In addition to Jon's answer, you can also have something like this:

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);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!