Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
C# stellt einen Satz integraler und gleitkommabasierter numerischer Typen bereit. Es gibt eine Konvertierung zwischen zwei numerischen Typen, entweder implizit oder explizit. Sie müssen einen Umwandlungsausdruck verwenden, um eine explizite Konvertierung auszuführen.
Implizite numerische Konvertierungen
Die folgende Tabelle zeigt die vordefinierten impliziten Konvertierungen zwischen den integrierten numerischen Typen:
| Von | Bis |
|---|---|
| sbyte |
short, int, long, float, , double, oder decimalnint |
| Byte |
short, ushort, intulonglonguint, float, , double, , oder nintdecimalnuint |
| kurze |
int, long, float, , doubleoder , oder decimalnint |
| ushort- |
int, uint, long, ulong, float, , doubleoder decimal, oder , nintoder nuint |
| int |
long, , float, doubleoder decimal, nint |
long, ulong, float, , doubleoder , oder decimalnuint |
|
| lange |
float, doubleoder decimal |
| ulong |
float, doubleoder decimal |
| schweben | double |
| nint |
long, float, double oder decimal |
| nuint |
ulong, float, double oder decimal |
Hinweis
Die impliziten Konvertierungen von int, uint, long, ulong, nintoder in float und nuint von longulong, , nintoder nuint um einen double Verlust der Genauigkeit, aber niemals einen Verlust einer Größenordnung verursachen. Die anderen impliziten numerischen Konvertierungen verlieren nie Informationen.
Beachten Sie außerdem, dass
Jeder integrale numerische Typ ist implizit in einen numerischen Gleitkommatyp konvertierbar.
Es gibt keine impliziten Konvertierungen in die
bytetypensbyte. Es gibt keine impliziten Konvertierungen aus dendoubleUnd-Typendecimal.Es gibt keine impliziten Konvertierungen zwischen dem
decimalTyp und denfloatTypendouble.Ein Wert eines konstanten Typausdrucks
int(z. B. ein wert, der durch ein ganzzahliges Literal dargestellt wird) kann implizit insbyte, ,shortbyte,ushortuint, ,ulong, , ,nintoder ,nuintwenn er sich im Bereich des Zieltyps befindet:byte a = 13; byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'Wie im vorherigen Beispiel gezeigt, tritt ein Compilerfehler CS0031 auf, wenn sich der Konstantenwert nicht im Bereich des Zieltyps befindet.
Explizite numerische Konvertierungen
Die folgende Tabelle zeigt die vordefinierten expliziten Konvertierungen zwischen den integrierten numerischen Typen, für die keine implizite Konvertierung vorhanden ist:
| Von | Bis |
|---|---|
| sbyte |
byte, ushort, uint, ulong oder nuint |
| Byte | sbyte |
| kurze |
sbyte, byte, ushort, uint, ulongoder nuint |
| ushort- |
sbyte, byteoder short |
| int |
sbyte, byte, short, ushort, , uint, oder ulongnuint |
sbyte, byte, short, ushort, intoder nint |
|
| lange |
sbyte, byte, short, ushortintuint, , oder nintulongnuint |
| ulong |
sbyte, byte, short, ushortintuint, , oder nintlongnuint |
| schweben |
sbyte, byte, shortuintintushort, long, , ulong, , oder nintdecimalnuint |
| doppelt |
sbyte, byte, shortlongushortuintint, ulong, , , float, , decimal, , oder nintnuint |
| dezimal |
sbyte, byte, shortlongushortuintint, ulong, , , float, , double, , oder nintnuint |
| nint |
sbyte, , shortbyte, ushort, int, , uint, oder ulongnuint |
| nuint |
sbyte, , shortbyte, ushort, int, , uint, oder longnint |
Hinweis
Eine explizite numerische Konvertierung kann zu Datenverlusten führen oder eine Ausnahme auslösen, in der Regel eine OverflowException.
Beachten Sie außerdem Folgendes:
Wenn Sie einen Wert eines integralen Typs in einen anderen integralen Typ konvertieren, hängt das Ergebnis vom Überlaufüberprüfungskontext ab. In einem überprüften Kontext ist die Konvertierung erfolgreich, wenn sich der Quellwert innerhalb des Bereichs des Zieltyps befindet. Andernfalls wird OverflowException ausgelöst. In einem deaktivierten Kontext ist die Konvertierung immer erfolgreich und wird wie folgt fortgesetzt:
Wenn der Quelltyp größer als der Zieltyp ist, wird der Quellwert abgeschnitten, indem die wichtigsten "zusätzlichen" Bits verworfen werden. Das Ergebnis wird dann als Wert des Zieltyps behandelt.
Wenn der Quelltyp kleiner als der Zieltyp ist, ist der Quellwert entweder mit einem Vorzeichen oder einer Null erweitert, sodass er dieselbe Größe wie der Zieltyp aufweist. Vorzeichenerweiterung wird verwendet, wenn der Quelltyp ein Vorzeichen hat; Nullerweiterung wird verwendet, wenn der Quelltyp kein Vorzeichen hat. 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 des Zieltyps behandelt.
Wenn Sie einen
decimalWert in einen integralen Typ konvertieren, wird dieser Wert in Richtung Null auf den nächsten integralen Wert gerundet. Wenn sich der resultierende integrale Wert außerhalb des Bereichs des Zieltyps befindet, wird ein OverflowException Fehler ausgelöst.Wenn Sie einen
doubleoderfloateinen Wert in einen integralen Typ konvertieren, wird dieser Wert auf null auf den nächsten integralen Wert gerundet. Wenn sich der resultierende integrale Wert außerhalb des Bereichs des Zieltyps befindet, hängt das Ergebnis vom Kontext der Überlaufüberprüfung ab. In einem aktivierten Kontext wird ein OverflowException Fehler ausgelöst, während es sich in einem deaktivierten Kontext um einen nicht angegebenen Wert des Zieltyps handelt.Beim Konvertieren in
doublefloatwird derdoubleWert auf den nächstenfloatWert gerundet. Wenn derdoubleWert zu klein oder zu groß ist, um in denfloatTyp einzupassen, ist das Ergebnis null oder unendlich.Wenn Sie konvertieren
floatoderdoubleindecimal, wird der Quellwert in Darstellung konvertiert und bei Bedarf auf die nächste Zahl nach der 28. Dezimalstelle gerundetdecimal. Abhängig vom Wert des Quellwerts kann eines der folgenden Ergebnisse auftreten:Wenn der Quellwert zu klein ist, um als ein
decimalWert dargestellt zu werden, wird das Ergebnis null.Wenn der Quellwert NaN (keine Zahl), Unendlichkeit oder zu groß ist, um als eine
decimaldargestellt zu werden, wird ein OverflowException Wurf ausgelöst.
Wenn Sie in
decimalfloatoderdouble, der Quellwert wird auf den nächstgelegenenfloatoderdoubleWert gerundet.
C#-Sprachspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation: