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.