viene visualizzato l'errore perché i numeri interi letterali vengono trattati come int
di default e int
non implicitamente in short
a causa della perdita di precisione - da qui l'errore del compilatore. I numeri con una posizione decimale, ad esempio 1.0
vengono considerati come double
per impostazione predefinita. dettagli
questa risposta cosa modificatori sono disponibili per esprimere diverse letterali, ma purtroppo non si può fare questo per short
:
C# short/long/int literal format?
così hai bisogno di gettare in modo esplicito il vostro int
:
myShortInt = Condition ? (short)1 :(short)2;
oppure:
myShortInt = (short)(Condition ? 1 :2);
Ci sono casi in cui il compilatore può fare questo per voi, come ad esempio l'assegnazione di un valore letterale intero che si inserisce all'interno di un
short
ad un
short
:
myShortInt = 1;
Non
sicuro perché non è stato esteso a ternario azioni, si spera che qualcuno possa spiegare il ragionamento che sta dietro.
fonte
2013-08-08 11:16:01
Immagino che l'operatore ternario sia generico; qualcosa come 'operatore T pubblico?: (condizione bool, T a, T b)' e il compilatore crede che 'T' in questa istanza sia un' int', perché entrambi gli input sono 'int's. –
Nolonar