Passare un array vuoto come valore predefinito di un parametro facoltativo

Come si può definire una funzione che accetta come opzione una matrice opzionale con un array vuoto?

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

risultati in:

Il valore del parametro predefinito per ‘array’ deve essere una costante in fase di compilazione.

Non è ansible creare costanti in fase di compilazione dei riferimenti a oggetti.

L’unica costante valida in fase di compilazione che puoi utilizzare è null , quindi modifica il tuo codice in questo modo:

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

E dentro il tuo metodo fai questo:

 array = array ?? new ushort[0]; 

Se puoi rendere l’array l’ultimo argomento, potresti anche fare questo:

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

Il compilatore passerà automaticamente un array vuoto se non è specificato, e avrai la flessibilità aggiuntiva di passare un array come un singolo argomento o mettere gli elementi direttamente come argomenti di lunghezza variabile al tuo metodo.

So che è una vecchia domanda e, sebbene questa risposta non risolva direttamente come aggirare le limitazioni imposte dal compilatore, l’overloading dei metodi è un’alternativa:

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