Pasar una matriz vacía como valor predeterminado de un parámetro opcional [duplicar]
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 predeterminado del parámetro para 'array' debe ser una constante en tiempo de compilación.
3 answers
No se pueden crear constantes en tiempo de compilación de referencias de objetos.
La única constante válida en tiempo de compilación que puedes usar es null
, así que cambia tu código a esto:
public void DoSomething(int index, ushort[] array = null,
bool thirdParam = true)
Y dentro de tu método haz esto:
array = array ?? new ushort[0];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-13 20:22:17
Si puede hacer que el array 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 se especifica, y obtendrá la flexibilidad añadida de pasar una matriz como un solo argumento o poner los elementos directamente como argumentos de longitud variable a su método.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-28 20:10:13
Sé que es una pregunta antigua, y aunque esta respuesta no resuelve directamente cómo sortear 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){
...
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-05 23:03:17