web-dev-qa-db-fra.com

Passer un tableau vide comme valeur par défaut d'un paramètre facultatif

Comment définit-on une fonction qui prend un tableau optionnel avec un tableau vide par défaut?

public void DoSomething(int index, ushort[] array = new ushort[] {},
 bool thirdParam = true)

résulte en:

La valeur par défaut du paramètre pour "tableau" doit être une constante de temps de compilation.

76
MandoMando

Vous ne pouvez pas créer de constantes au moment de la compilation des références d'objet.

La seule constante de compilation valide que vous pouvez utiliser est null, changez donc votre code en ceci:

public void DoSomething(int index, ushort[] array = null,
  bool thirdParam = true)

Et à l'intérieur de votre méthode, procédez comme suit:

array = array ?? new ushort[0];
115

Si vous pouvez faire du tableau le dernier argument, vous pouvez également le faire:

public void DoSomething(int index, bool wasThirdParam = true, params ushort[] array)

Le compilateur transmettra automatiquement un tableau vide s'il n'est pas spécifié, et vous obtenez la flexibilité supplémentaire de passer un tableau en tant qu'argument unique ou de placer les éléments directement en tant qu'arguments de longueur variable dans votre méthode.

20
chkn

Je sais que c'est une vieille question, et bien que cette réponse ne résout pas directement comment contourner les limitations imposées par le compilateur, la surcharge de méthode est une alternative:

   public void DoSomething(int index, bool thirdParam = true){
        DoSomething(index, new ushort[] {}, thirdParam);
   }

   public void DoSomething(int index, ushort[] array, bool thirdParam = true){

      ...
   }
5
Darius