web-dev-qa-db-fra.com

C # - Est-il possible d'avoir des paramètres nuls?

public void Foo(params string[] values)
{
}

Est-il possible que values puisse jamais être null, ou sera-t-il toujours défini avec 0 ou plusieurs éléments?

54
michael

Absolument - vous pouvez l'appeler avec un argument de type chaîne [] avec une valeur nulle:

string[] array = null;
Foo(array);
66
Jon Skeet

J'ai décidé d'écrire du code pour tester cela par moi-même. En utilisant le programme suivant:

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

Les résultats suivants sont obtenus:

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

Alors oui, il est tout à fait possible que le tableau associé aux paramètres soit nul.

37
Joshua Rodgers

Ma première supposition a été de déclarer le paramètre avec la valeur par défaut de null, ce qui aurait du sens dans certains cas, mais le langage c # ne le permet pas.

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

erreur CS1751: impossible de spécifier une valeur par défaut pour un tableau de paramètres

Le moyen de contourner cette limitation en passant explicitement null a déjà été répondu.

4
codymanix

En plus de la réponse de Jon, vous pouvez également avoir quelque chose comme ceci:

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);
3
Adrian Carneiro