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?
Absolument - vous pouvez l'appeler avec un argument de type chaîne [] avec une valeur nulle:
string[] array = null;
Foo(array);
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.
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.
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);