parametros parameter opcionales c# default-value optional-parameters

opcionales - optional parameter c# string



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

Esta pregunta ya tiene una respuesta aquí:

¿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 compilación.


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

La única constante válida en tiempo de compilació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];


Sé que es una vieja pregunta, y aunque esta respuesta no resuelve directamente cómo evitar las limitaciones impuestas por el compilador, 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){ ... }


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 compilador 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.