Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
C# biedt een set integrale en drijvende komma numerieke typen. Er bestaat een conversie tussen twee numerieke typen, impliciet of expliciet. U moet een cast-expressie gebruiken om een expliciete conversie uit te voeren.
Impliciete numerieke conversies
In de volgende tabel ziet u de vooraf gedefinieerde impliciete conversies tussen de ingebouwde numerieke typen:
| Van | Tot | 
|---|---|
| sbyte | 
              short, , intlong, , float, , of decimaldoublenint | 
| byte | 
              short, , ushortint, uint, , long, , ulong, doublefloat, decimal, , nintofnuint | 
| korte | 
              int, , longfloat, , doubleof , of decimalnint | 
| ushort | 
              int, , longuint, ulong, , float, , doubleof nintdecimalnuint | 
| int | 
              long, , floatdoubleof decimal,nint | 
| uint | 
              long, , ulongfloat, , doubleof , of decimalnuint | 
| lange | 
              float, doubleof decimal | 
| ulong | 
              float, doubleof decimal | 
| float | double | 
| nint | 
              long, float, double, of decimal | 
| nuint | 
              ulong, float, double, of decimal | 
Opmerking
De impliciete conversies van, , , , ulong, nintof van longfloatnintulong, nuint , of nuint om double een verlies van precisie te veroorzaken, maar nooit verlies van een orde van grootte. longuintint De andere impliciete numerieke conversies verliezen nooit informatie.
Houd er ook rekening mee dat
Elk integraal numeriek type wordt impliciet converteerbaar naar elk numeriek type met drijvende komma.
Er zijn geen impliciete conversies naar de
byteensbytetypen. Er zijn geen impliciete conversies van dedoubleendecimaltypen.Er zijn geen impliciete conversies tussen het
decimaltype en defloattypendouble.Een waarde van een constante expressie van het type
int(bijvoorbeeld een waarde die wordt vertegenwoordigd door een letterlijk geheel getal) kan impliciet worden geconverteerd naarsbyte,byte,ushortshortuint,ulongofnintnuint, als deze zich binnen het bereik van het doeltype bevindt:byte a = 13; byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'Zoals in het voorgaande voorbeeld wordt weergegeven, treedt er een compilerfout CS0031 op als de constante waarde zich niet binnen het bereik van het doeltype bevindt.
Expliciete numerieke conversies
In de volgende tabel ziet u de vooraf gedefinieerde expliciete conversies tussen de ingebouwde numerieke typen waarvoor er geen impliciete conversie is:
| Van | Tot | 
|---|---|
| sbyte | 
              byte, ushort, uint, ulongof nuint | 
| byte | sbyte | 
| korte | 
              sbyte, byte, ushort, uint, ulong, of nuint | 
| ushort | 
              sbyte, byteof short | 
| int | 
              sbyte, , byteshort, , ushort, , of ulonguintnuint | 
| uint | 
              sbyte, byte, short, ushort, int, of nint | 
| lange | 
              sbyte, , byte, short, ushort, intuint, , ulong, of nintnuint | 
| ulong | 
              sbyte, , byte, short, ushort, intuint, , long, of nintnuint | 
| float | 
              sbyte, , byteshort, ushort, , int, , uint, ulonglong, decimal, , nintofnuint | 
| dubbele | 
              sbyte, , short, , , uintint, long, ulongfloatdecimalnintushortbytenuint | 
| decimaal | 
              sbyte, , short, , , uintint, long, ulongfloatdoublenintushortbytenuint | 
| nint | 
              sbyte, , byteshort, , ushort, int, , , uint, of ulongnuint | 
| nuint | 
              sbyte, , byteshort, , ushort, int, , , uint, of longnint | 
Opmerking
Een expliciete numerieke conversie kan leiden tot gegevensverlies of een uitzondering genereren, meestal een OverflowException.
Houd er ook rekening mee dat:
Wanneer u een waarde van een integraal type converteert naar een ander integraal type, is het resultaat afhankelijk van de context van overloopcontrole. In een gecontroleerde context slaagt de conversie als de bronwaarde binnen het bereik van het doeltype valt. Anders wordt een OverflowException gegooid. In een niet-gecontroleerd context slaagt de conversie altijd en gaat het als volgt:
Als het brontype groter is dan het doeltype, wordt de bronwaarde afgekapt door de 'extra' belangrijkste bits te verwijderen. Het resultaat wordt vervolgens behandeld als een waarde van het doeltype.
Als het brontype kleiner is dan het doeltype, wordt de bronwaarde uitgebreid of nul uitgebreid, zodat deze van dezelfde grootte is als het doeltype. De tekenextensie wordt gebruikt als het brontype is ondertekend; zero-extension wordt gebruikt als het brontype niet is ondertekend. Het resultaat wordt vervolgens behandeld als een waarde van het doeltype.
Als het brontype dezelfde grootte heeft als het doeltype, wordt de bronwaarde beschouwd als een waarde van het doeltype.
Wanneer u een
decimalwaarde converteert naar een integraal type, wordt deze waarde afgerond op nul naar de dichtstbijzijnde integrale waarde. Als de resulterende integrale waarde buiten het bereik van het doeltype valt, wordt er een OverflowException gegenereerd.Wanneer u een
doubleoffloatwaarde converteert naar een integraal type, wordt deze waarde afgerond op nul naar de dichtstbijzijnde integrale waarde. Als de resulterende integrale waarde buiten het bereik van het doeltype valt, is het resultaat afhankelijk van de context voor overloopcontrole. In een gecontroleerde context wordt er een OverflowException gegenereerd, terwijl het resultaat in een niet-gecontroleerde context een niet-opgegeven waarde van het doeltype is.Wanneer u converteert
doublenaarfloat, wordt dedoublewaarde afgerond op de dichtstbijzijndefloatwaarde. Als dedoublewaarde te klein of te groot is om in hetfloattype te passen, is het resultaat nul of oneindig.Wanneer u converteert
floatofdoublenaardecimal, wordt de bronwaarde indien nodig geconverteerd naardecimalweergave en afgerond op het dichtstbijzijnde getal na de 28e decimale plaats. Afhankelijk van de waarde van de bronwaarde kan een van de volgende resultaten optreden:Als de bronwaarde te klein is om te worden weergegeven als een
decimal, wordt het resultaat nul.Als de bronwaarde NaN (geen getal), oneindigheid of te groot is om te worden weergegeven als een
decimal, wordt er een OverflowException gegenereerd.
Wanneer u converteert
decimalnaarfloatofdouble, wordt de bronwaarde afgerond op respectievelijk de dichtstbijzijndefloatwaarde ofdoublewaarde.
C#-taalspecificatie
Zie de volgende secties van de C#-taalspecificatie voor meer informatie: