valores valor validar utilice tipo tener que puede operador objeto net diferente debe convertir comprobar acepte acepta c# asp.net

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