Sie erhalten den Fehler, da wörtliche ganze Zahlen als int
standardmäßig behandelt werden und int
nicht implizit zu gieße short
wegen Verlust an Präzision - daher der Compiler-Fehler. Zahlen mit einer Dezimalstelle wie 1.0
werden standardmäßig als double
behandelt.
Diese Antwort Details, welche Modifikatoren für die Expression von verschiedenen Literale zur Verfügung stehen, aber leider kann man das nicht für short
:
C# short/long/int literal format?
So werden Sie explizit werfen müssen, um Ihre int
:
myShortInt = Condition ? (short)1 :(short)2;
Oder:
myShortInt = (short)(Condition ? 1 :2);
Es gibt Fälle, wenn der Compiler dies für Sie tun können, wie eine wörtliche Integer-Wert zuweisen, der innerhalb eines
short
zu einem
short
passt:
myShortInt = 1;
nicht sicher, warum das war nicht zu ternären verlängert Aktionen, hoffentlich kann jemand die Gründe dafür erklären.
Ich vermute, der ternäre Operator ist generisch; etwas wie 'public T operator?: (bool Bedingung, T a, T b)' und der Compiler glaubt, dass 'T' in diesem Fall ein' int' ist, weil beide Eingaben 'int' sind. –
Nolonar