Kann nicht implizit konvertiert Typ "long" zu "int?"?
Es eine sehr einfache Frage - konvertiert einen Typ long-variable auf eine null-Datentyp int (int?). (siehe Beispiel weiter unten - nicht der eigentliche code)
int? y = 100;
long x = long.MaxValue;
y = x;
Bin ich immer der compile-Zeit-Fehler.
"Kann nicht implizit konvertiert Typ 'long' in 'int?'. Eine explizite Konvertierung vorhanden ist (fehlt ein cast?).
Ich habe das Update ( siehe unten die Lösung Abschnitt), Meine Neugier bei der Buchung die Frage ist der 3 Lösungen, welche ist zu empfehlen?
Lösung
y = Convert.ToInt32(x);
y = (int)x;
y = unchecked((int) x);
Vielen Dank im Voraus für Eure Vorschläge
- Wissen Sie, warum sich der compiler beschwert sich über das? Es wird versucht, Ihnen zu helfen.
- David - ich bin völlig der Kenntnis von Verlust an Präzision ( verliert Wert), meine Frage war von den 3 was empfohlen wird( die oben ist nur ein Beispiel)
- Welches ist empfehlenswert, hängt von Ihren Anforderungen ab.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grund benötigen Sie eine explizite Konvertierung ist, dass nicht alle Werte der
long
dargestellt werden kann, wie einint
. Der compiler ist mehr oder weniger sagt: "Sie kann dies tun, aber Sie müssen mir sagen, Sie wissen, was Sie tun'.Pro die docs,
Convert.ToInt32
zu überprüfen, und werfen einOverflowException
wenn dielong
dargestellt werden können alsint
. Sie können sehen, die Umsetzung in die reference source - es ist gerade diese prüfen und dann eine Besetzung.Den beiden letzten Optionen sind (meist) die gleichen und damit die Besetzung trotz überlauf als
unchecked
ist der compiler, der Standard. Wenn Sie den compiler standardmäßig aktiviert verwenden Sie die /checked-Schalter dann erhalten Sie eineOverflowException
wenn nicht in einemunchecked
block.Welcher ist der "beste", es hängt davon ab, was Ihre Anforderung ist.
int
32-bit-integral währendlong
ist 64-bit-integral.long
können speichern/darstellen alleint
Werte aber allelong
Werte können nicht dargestellt werden durchint
solong
ist größer geben alsint
deshalbint
werden können implizit inlong
durch den compiler, aber nicht Umgekehrt.So, dass ist der Grund, warum müssen wir explizit cast/convert
long
zuint
die möglicherweise dazu führen, dass Informationen Verlust, wenn daslong
ist nicht darstellbar alsint