102 votes

C#-Comment utiliser une liste vide<string> comme paramètre facultatif

Quelqu'un peut-il fournir un exemple de cela?

J'ai essayé null , string.Empty et l'initialisation de l'objet mais ils ne fonctionnent pas car la valeur par défaut doit être constante au moment de la compilation

168voto

Vasea Points 2475

Utilisez simplement l'opérateur de fusion nul et une instance de List<string>

 public void Process(string param1, List<string> param2 = null) 
{
    param2 = param2 ?? new List<string>();

    // or starting with C# 8
    param2 ??= new List<string>();
}

Le problème avec ceci est que si "param2" est nul et que vous attribuez une nouvelle référence, elle ne serait pas accessible dans le contexte d'appel.

40voto

HimBromBeere Points 8328

Vous pouvez également faire ce qui suit en utilisant default qui EST une constante de temps de compilation ( null dans le cas d'un List<T> ):

 void DoSomething(List<string> lst = default(List<string>)) 
{
    if (lst == default(List<string>)) lst = new List<string>();
}

6voto

Domenic Points 40761

C'est impossible. Vous devriez plutôt utiliser la surcharge de méthode.

 public static void MyMethod(int x, List<string> y) { }
public static void MyMethod(int x)
{
    MyMethod(x, Enumerable<string>.Empty());
}

3voto

Drake Points 1329
    private void test(List<string> optional = null)
    {

    }

désolé pour la chaîne au lieu de la liste. Null fonctionne bien pour moi sur 4.0, j'utilise Visual Studio 2010

-3voto

javad hemati Points 11
private void test(params object[] params)
{

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X