Pasar una matriz vacía como valor predeterminado de un parámetro opcional

¿Cómo se define una función que toma una matriz opcional con una matriz vacía como predeterminada?

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

resultados en:

El valor de parámetro predeterminado para ‘array’ debe ser una constante de tiempo de comstackción.

No puede crear constantes en tiempo de comstackción de referencias a objetos.

La única constante válida en tiempo de comstackción que puede usar es null , por lo tanto, cambie su código a este:

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

Y dentro de tu método haz esto:

 array = array ?? new ushort[0]; 

Si puede hacer que la matriz sea el último argumento, también podría hacer esto:

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

El comstackdor pasará automáticamente una matriz vacía si no está especificada, y obtendrá la flexibilidad adicional de pasar una matriz como un único argumento o poner los elementos directamente como argumentos de longitud variable en su método.

Sé que es una vieja pregunta, y aunque esta respuesta no resuelve directamente cómo evitar las limitaciones impuestas por el comstackdor, la sobrecarga de métodos es una alternativa:

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