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);