web-dev-qa-db-fra.com

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

Quelqu'un peut-il en donner un exemple?

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

53
Pavan Keerthi

Utilisez simplement l'opérateur de coalescence nul et une instance de List vide

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

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

99
Vasea

Vous pouvez également effectuer les opérations suivantes en utilisant default qui IS 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>();
}
15
HimBromBeere

C'est impossible. Vous devez 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());
}
4
Domenic
    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

2
Drake