parametro - Opcional/null-able OUT parámetro en C#
optional parameter in c# (5)
Eso me parece bien. Una out
no puede ser opcional por razones técnicas (debe apuntar a una instancia válida).
Tengo un método que tiene varias anulaciones. En una de las anulaciones más expandidas, quiero devolver un parámetro OUT pero no en mis anulaciones más simples. Por ejemplo:
public bool IsPossible(string param1, int param2)
public bool IsPossible(string param1, int param2, out bool param3)
La forma en que actualmente estoy logrando esto, es así:
public bool IsPossible(string param1, int param2) {
bool temp;
return IsPossible(param1, param2, out temp);
}
¿Hay una mejor manera de lograr esto? ¿Puedo (o debo) usar un parámetro de salida nula?
OP:
¿Puedo (o debo) usar un parámetro de salida nula?
Un parámetro de nullable no te servirá de mucho. Esta:
public bool IsPossible( string param1, int param2, out bool? param3 )
{
...
}
no hace param3
opcional. Cambia la semántica de lo que es param3
. Un bool?
(también Nullable<bool>
como Nullable<bool>
) amplía el dominio de param3
de 2 valores ( true
y false
) a 3, agregando un tercer valor ( null
), generalmente interpretado como faltante / desconocido. La persona que llama todavía debe proporcionar los tres argumentos.
Sobrecargar IsPossible()
al proporcionar una sobrecarga (el escenario "no importa") que descarta el parámetro de referencia es la solución adecuada.
Personalmente creo que está bien "como está". Sin embargo, otro enfoque es devolver un valor de retorno compuesto (tal vez una estructura inmutable con 2 propiedades); Eso evita el hecho de que algunas personas evitan out
. Yo no soy una de esas personas: p
Re la pregunta; de hecho, out / ref no puede ser opcional.
Si deseaba obtener una fantasía innecesaria, podría otorgarle una conversión a bool de tipo conposite para permitirlo implícito en las pruebas.
Sí, las variables anulables son grandes. Entonces harías algo como esto.
public bool? IsPossible(string param1, int param2);
var ans = IsPossible("Parm1", 1);
if (ans.HasValue)
{
//working.
}
A ''ref'' or ''out'' parameter cannot have a default value.
La forma en que lo has hecho está bien. Lo siento, no hay bala de plata.