valor - operador ? c#
¿Por qué no puedo establecer un int anulable en null en una sentencia if ternaria? (3)
Esta pregunta ya tiene una respuesta aquí:
El código de C # a continuación:
int? i;
i = (true ? null : 0);
me da el error
El tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre ''<null>'' y ''int''
¿No debería esto ser válido? que me estoy perdiendo aqui?
Debe utilizar la palabra clave predeterminada () en lugar de nula al tratar con operadores ternarios.
Ejemplo:
int? i = (true ? default(int?) : 0);
Alternativamente, puedes lanzar el nulo:
int? i = (true ? (int?)null : 0);
Personalmente me atengo a la notación default() , es solo una preferencia, en realidad. Pero, en última instancia, debería limitarse a una sola notación específica, IMHO.
HTH!
El compilador trata de evaluar la expresión de la mano derecha. null es null y el 0 es un int literal, no int? . El compilador está tratando de decirle que no puede determinar qué tipo de expresión debe evaluar la expresión. No hay una conversión implícita entre null e int , de ahí el mensaje de error.
¿Necesita decirle al compilador que la expresión debe evaluar como un int? . Hay una conversión implícita entre int? y int , o entre null e int? , entonces cualquiera de estos debería funcionar:
int? x = true ? (int?)null : 0;
int? y = true ? null : (int?)0;
La parte (true ? null : 0) convierte en una función de una manera. Esta función necesita un tipo de retorno. Cuando el compilador necesita averiguar el tipo de retorno no puede.
Esto funciona:
int? i;
i = (true ? null : (int?)0);