100 votes

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

Comment peut-on définir une fonction qui prend un tableau facultatif avec un tableau vide par défaut?

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

résultats:

Valeur de paramètre par défaut pour 'array' doit être une constante de compilation.

147voto

Lasse V. Karlsen Points 148037

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

La seule constante à la compilation que vous pouvez utiliser est - null, afin de modifier votre code à ceci:

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

Et à l'intérieur de votre méthode de faire cela:

array = array ?? new ushort[0];

27voto

chkn Points 101

Si vous pouvez faire le tableau de la dernière argument, vous pourriez aussi le faire:

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

Le compilateur va automatiquement passer un tableau vide si il n'est pas spécifié, et vous bénéficiez de la flexibilité pour passer un tableau en argument unique ou mettez-la directement à des éléments comme la longueur variable des arguments à votre méthode.

7voto

SCRIPTONITE Points 1687

Je sais que c'est une vieille question, et bien que cette réponse n'est pas directement à résoudre la façon de 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){

      ...
   }

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