me encontré con un error extraño:Tipos anulables y el operador ternario: ¿por qué es `? 10: nulo` prohibido?
private bool GetBoolValue()
{
//Do some logic and return true or false
}
Luego, en otro método, algo como esto:
int? x = GetBoolValue() ? 10 : null;
simple, si el método devuelve true, asigne 10 a los anulables int
x. De lo contrario, asigne nulo al nullable int. Sin embargo, el compilador se queja:
Error 1 Type of conditional expression cannot be determined because there is no implicit conversion between
int
and<null>
.
¿Estoy volviendo loco?
Tal vez esto se corregirá en una futura versión del compilador, ya que, en realidad hay una conversión implícita entre 'int' y '' y que es 'int?' –
@bruno, ¿Cómo es eso diferente a decir "realmente hay una conversión implícita entre [cualquier tipo] y [cualquier otro tipo] y eso es 'objeto'"? ¿Crees que también "corregirán" eso en una versión futura del compilador? Por ejemplo: object x = GetBoolValue()? (objeto) "foo": (objeto) DateTime.Now; – LukeH
Imagine que el compilador fue lo suficientemente inteligente como para decir "OK, no estamos usando el primer tipo (int), entonces buscaremos otro tipo que podamos usar para el resultado de esta expresión". ¿Qué obtendrías si escribieras "Console.WriteLine ((Predicate()? 5.6: null) .GetType(). ToString());"? ¿Podrías flotar? o doble? ¿u objeto? ¿O una clase definida por el usuario con conversión implícita de float? ¿Cómo sabría el compilador qué tipo elegir, ya que no puede elegir el que está en la expresión? – mquander