Otrzymujesz błąd, ponieważ domyślne liczby całkowite są traktowane domyślnie jako int
, a int
nie jest domyślnie rzutowany na short
z powodu utraty precyzji - stąd błąd kompilatora. Liczby z miejscem dziesiętnym, takie jak 1.0
, są domyślnie traktowane jako double
. Szczegóły
Ta odpowiedź co modyfikatory są dostępne dla wyrażania różnych literały, ale niestety nie można tego zrobić za short
:
C# short/long/int literal format?
Więc trzeba będzie jednoznacznie oddać swój int
:
myShortInt = Condition ? (short)1 :(short)2;
Lub:
myShortInt = (short)(Condition ? 1 :2);
Istnieją przypadki, gdy kompilator może zrobić dla Ciebie, takie jak przypisanie dosłowną wartość całkowitą, która pasuje Wewnątrz
short
Do
short
:
myShortInt = 1;
Nie wiem, dlaczego to nie zostało przedłużone do trójskładnikowego działania, miejmy nadzieję, że ktoś może wyjaśnić rozumowanie za tym.
Zgaduję, że operator trójskładnikowy jest ogólny; coś w stylu 'public T operator?: (bool condition, T a, T b)' i kompilator uważa, że 'T' w tym przypadku jest' int', ponieważ oba wejścia są 'int's. –
Nolonar