Ereignisse
Erstellen von KI-Apps und Agents
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
C# bietet eine Reihe von integralen numerischen Typen und numerischen Gleitkommatypen. Es gibt eine Konvertierung zwischen zwei beliebigen numerischen Typen, entweder implizit oder explizit. Sie müssen einen Cast-Ausdruck verwenden, um eine explizite Konvertierung durchzuführen.
Folgende Tabelle veranschaulicht vordefinierte implizite Konvertierungen zwischen integrierten numerischen Typen:
Von | Beschreibung |
---|---|
sbyte | short , int , long , float , double , decimal oder nint |
byte | short , ushort , int , uint , long , ulong , float , double , decimal , nint oder nuint |
short | int , long , float , double oder decimal oder nint |
ushort | int , uint , long , ulong , float , double oder decimal , nint oder nuint |
int | long , float , double oder decimal , nint |
uint | long , ulong , float , double oder decimal oder nuint |
long | float , double oder decimal |
ulong | float , double oder decimal |
float | double |
nint | long , float , double oder decimal |
nuint | ulong , float , double oder decimal |
Hinweis
Die impliziten Konvertierungen aus int
, uint
, long
, ulong
, nint
oder nuint
in float
und aus long
, ulong
, nint
oder nuint
in double
können einen Verlust an Genauigkeit verursachen, aber niemals einen Verlust in einer Größenordnung. Die anderen impliziten numerischen Konvertierungen verlieren nie Informationen.
Beachten Sie außerdem:
Jeder integrale numerische Typ ist implizit in jeden numerischen Gleitkommatypen konvertierbar.
Es gibt keine impliziten Konvertierungen in die Typen byte
und sbyte
. Es gibt keine impliziten Konvertierungen aus den Typen double
und decimal
.
Es gibt keine impliziten Konvertierungen zwischen dem Typ decimal
und dem Typ float
oder double
.
Ein Wert eines konstanten Ausdrucks vom Typ int
(z. B. ein Wert, der durch ein ganzzahliges Literal dargestellt wird), kann implizit in sbyte
, byte
, short
, ushort
, uint
, ulong
, nint
oder nuint
konvertiert werden, wenn er sich im Bereich des Zieltyps befindet:
byte a = 13;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Wie das vorherige Beispiel zeigt, tritt der Compilerfehler CS0031 auf, wenn der konstante Wert nicht innerhalb des Bereichs des Zieltyps liegt.
Folgende Tabelle veranschaulicht vordefinierte explizite Konvertierungen zwischen integrierten numerischen Typen, für die es keine implizite Konvertierung gibt:
Von | Beschreibung |
---|---|
sbyte | byte , ushort , uint , ulong oder nuint |
byte | sbyte |
short | sbyte , byte , ushort , uint , ulong oder nuint |
ushort | sbyte , byte oder short |
int | sbyte , byte , short , ushort , uint , ulong oder nuint |
uint | sbyte , byte , short , ushort , int oder nint |
long | sbyte , byte , short , ushort , int , uint , ulong , nint oder nuint |
ulong | sbyte , byte , short , ushort , int , uint , long , nint oder nuint |
float | sbyte , byte , short , ushort , int , uint , long , ulong , decimal , nint oder nuint |
double | sbyte , byte , short , ushort , int , uint , long , ulong , float , decimal , nint oder nuint |
decimal | sbyte , byte , short , ushort , int , uint , long , ulong , float , double , nint oder nuint |
nint | sbyte , byte , short , ushort , int , uint , ulong oder nuint |
nuint | sbyte , byte , short , ushort , int , uint , long oder nint |
Hinweis
Eine explizite numerische Konvertierung kann zu Datenverlust führen oder eine Ausnahme auslösen, typischerweise ein OverflowException.
Beachten Sie außerdem Folgendes:
Wenn Sie einen Wert von einem integralen Typ in einen anderen integralen Typ konvertieren, ist das Ergebnis vom Kontext der Überlaufprüfung abhängig. Die Konvertierung in einem geprüften Kontext ist erfolgreich, wenn der Quellwert sich innerhalb des Bereichs des Zieltyps befindet. Andernfalls wird eine OverflowException ausgelöst. In einem ungeprüften Kontext ist die Konvertierung immer erfolgreich, und sie verläuft wie folgt:
Wenn der Quelltyp größer als der Zieltyp ist, wird der Quellwert abgeschnitten, indem die wichtigsten „zusätzlichen“ Teile verworfen werden. Das Ergebnis wird dann als Wert des Zieltyps behandelt.
Wenn der Quelltyp kleiner als der Zieltyp ist, ist der Quellwert entweder signaturerweitert oder mit Null erweitert, sodass er die gleiche Größe wie der Zieltyp hat. Die Vorzeichenerweiterung wird verwendet, wenn der Quelltyp mit einem Vorzeichen versehen ist. Die Erweiterung mit Nullen (0) wird verwendet, wenn der Quelltyp mit keinem Vorzeichen versehen ist. Das Ergebnis wird dann als Wert des Zieltyps behandelt.
Wenn der Quelltyp die gleiche Größe wie der Zieltyp aufweist, wird der Quellwert als Wert vom Zieltyp behandelt.
Wenn Sie einen decimal
-Wert in einen integralen Typ konvertieren, wird dieser Wert Richtung 0 (null) auf den nächsten Integralwert gerundet. Wenn der erzeugte Integralwert sich außerhalb des Bereichs des Zieltyps befindet, wird eine OverflowException ausgelöst.
Wenn Sie einen double
- oderfloat
-Wert in einen integralen Typ konvertieren, wird dieser Wert Richtung 0 (null) auf den nächsten Integralwert gerundet. Wenn der resultierende Integralwert sich außerhalb des Bereichs des Zieltyps befindet, hängt das Ergebnis vom Kontext der Überlaufprüfung ab. In einem geprüften Kontext wird eine OverflowException ausgelöst, während das Ergebnis in einem ungeprüften Kontext ein nicht angegebener Wert des Zieltyps ist.
Wenn Sie double
in float
konvertieren, wird der double
-Wert auf den nächsten float
-Wert gerundet. Wenn der double
-Wert zu klein oder zu groß ist, um in den float
-Typ zu passen, ist das Ergebnis 0 (null) oder unendlich.
Wenn Sie float
oder double
in decimal
konvertieren, wird der Quellwert in eine decimal
-Darstellung konvertiert und bei Bedarf auf die nächste Zahl nach der achtundzwanzigsten Dezimalstelle gerundet. Je nach Wert des Quellwerts kann eines der folgenden Ergebnisse auftreten:
Wenn der Quellwert zu klein ist, als dass er als decimal
dargestellt werden könnte, ist das Ergebnis 0 (null).
Wenn der Quellwert NaN (nicht numerisch), unendlich oder zu groß ist, um als decimal
dargestellt zu werden, wird eine OverflowException ausgelöst.
Wenn Sie decimal
in float
oder double
konvertieren, wird der Quellwert in den nächsten float
- oder double
-Wert konvertiert.
Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
Erstellen von KI-Apps und Agents
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrieren