Comment 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ésulte en:
La valeur par défaut du paramètre pour ‘array’ doit être une constante à la compilation.
Vous ne pouvez pas créer de constantes de compilation des références d’object.
La seule constante de compilation valide que vous pouvez utiliser est null
, changez votre code en ceci:
public void DoSomething(int index, ushort[] array = null, bool thirdParam = true)
Et dans votre méthode, faites ceci:
array = array ?? new ushort[0];
Si vous pouvez faire du tableau le dernier argument, vous pouvez aussi faire ceci:
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 aurez 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.
Je sais que c’est une vieille question, et même si cette réponse ne résout pas directement la façon de contourner les limitations imposées par le compilateur, la surcharge de méthodes 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){ ... }