Ho appena imbattuto in un errore di strano:Nullable types e l'operatore ternario: perché è `? 10: null` vietato?
private bool GetBoolValue()
{
//Do some logic and return true or false
}
Poi, in un altro metodo, qualcosa di simile:
int? x = GetBoolValue() ? 10 : null;
Semplice, se il metodo restituisce true, assegnare 10 alle Nullable int
x. Altrimenti, assegna null al valore n. int. int. Tuttavia, il compilatore si lamenta:
Error 1 Type of conditional expression cannot be determined because there is no implicit conversion between
int
and<null>
.
Sono impazzito?
Forse questo sarà corretto in una versione futura del compilatore, perché, non c'è davvero una conversione implicita tra 'int' e '' ed è 'int?' –
@bruno, Com'è diverso dal dire "esiste davvero una conversione implicita tra [qualsiasi tipo] e [qualsiasi altro tipo] e questo è" oggetto ""? Pensi che lo "correggeranno" anche in una versione futura del compilatore? Ad esempio: oggetto x = GetBoolValue()? (oggetto) "pippo": (oggetto) DateTime.Now; – LukeH
Immaginate che il compilatore fosse abbastanza intelligente da dire "OK, non stiamo usando il primo tipo (int), quindi cercheremo un altro tipo che possiamo usare per il risultato di questa espressione." Cosa otterresti se hai digitato "Console.WriteLine ((Predicate()? 5.6: null) .GetType(). ToString());"? Vuoi prendere il galleggiante? o doppio? o oggetto? O una classe definita dall'utente con conversione implicita da float? Come fa il compilatore a sapere quale tipo scegliere, dal momento che non può scegliere quello nell'espressione? – mquander