El siguiente código no se compila:¿Por qué null necesita un molde de tipo explícito aquí?
//int a = ...
int? b = (int?) (a != 0 ? a : null);
Para compilar, lo que debe ser cambiado a
int? b = (a != 0 ? a : (int?) null);
Dado que tanto b = null
y b = a
son legales, esto no tiene sentido para mí .
¿Por qué tenemos que convertir el null
en un int?
y por qué no podemos simplemente proporcionar un molde de tipo explícito para toda la expresión (que sé que es posible en otros casos)?
Creo que al compilador no le gusta que haga tantas preguntas. Quiero decir, ¡mira, tienes 3 de ellos en una sola línea! – David
Esto debería responder a su pregunta de por qué: http://stackoverflow.com/questions/2215745/conditional-operator-cannot-cast-implicitly/2215959#2215959. Esta pregunta no es * exactamente * un duplicado de eso, pero el razonamiento sigue siendo el mismo. –
Tenga en cuenta que 'int? b = a! = 0? (int?) a: null; 'también funciona –