¿hay parámetros opcionales similares a PHP en C #?
-
19-08-2019 - |
Pregunta
con parámetros opcionales de PHP , si no envía un parámetro, se le asignará un valor predeterminado:
public function getCustomer(id, optionalMessage = "(no message)") {
...
}
en C # generalmente resuelvo esto con sobrecarga del método C # , por ejemplo:
public void GetCustomer(int id)
{
...
}
public void GetCustomer(int id, string optionalMessage)
{
...
}
pero extraño la variante pragmática de PHP, ¿C # también tiene alguna sintaxis azucarada para hacer parámetros opcionales también , como en el ejemplo de PHP?
Solución
No en C # 3.0; esta función se encuentra en la hoja de C # 4.0; consulte aquí .
Por ahora, tendrá que usar diferentes sobrecargas:
public void Foo(int a) {Foo(a, "");}
public void Foo(int a, string b) {...}
La sintaxis propuesta sería:
public void Foo(int a, string b = "") {...}
llamado con cualquiera de:
Foo(123); // use default b
Foo(123, "abc"); // optional by position
Foo(123, b: "abc"); // optional by name
Otros consejos
No, pero puede simularlos hasta cierto punto, especialmente si sus parámetros opcionales son del mismo tipo (o si no le importa hacer un poco de conversión).
Puede usar la bandera de parámetros.
void paramsExample(object arg1, object arg2, params object[] argsRest)
Debo señalar, sin embargo, esto pierde seguridad de tipo y no hay cumplimiento de tipo de los parámetros u orden.