开发者

C# - Is it possible to have null params?

开发者 https://www.devze.com 2023-03-17 22:59 出处:网络
public开发者_如何学Python void Foo(params string[] values) { } Is it possible that values can ever be null, or will it always be set with 0 or more items?Absolutely - you can call it with an argumen
public开发者_如何学Python void Foo(params string[] values)
{
}

Is it possible that values can ever be null, or will it always be set with 0 or more items?


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);
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号