Tables de conversion de types dans .NET
Une conversion étendue se produit quand une valeur d’un type est convertie en un autre type de taille égale ou supérieure. Une conversion restrictive se produit quand une valeur d’un type est convertie en une valeur d’un autre type de taille inférieure. Les tableaux de cette rubrique illustrent les comportements propres aux deux types de conversion.
Conversions étendues
Le tableau suivant décrit les conversions étendues qui peuvent être effectuées sans perte d’informations.
Type | Peut être converti sans perte de données en |
---|---|
Byte | UInt16, Int16, UInt32, Int32, UInt64, Int64, Single, Double, Decimal |
SByte | Int16, Int32, Int64, Single, Double, Decimal |
Int16 | Int32, Int64, Single, Double, Decimal |
UInt16 | UInt32, Int32, UInt64, Int64, Single, Double, Decimal |
Char | UInt16, UInt32, Int32, UInt64, Int64, Single, Double, Decimal |
Int32 | Int64, Double, Decimal |
UInt32 | Int64, UInt64, Double, Decimal |
Int64 | Decimal |
UInt64 | Decimal |
Single | Double |
Certaines conversions étendues à Single ou Double peuvent entraîner une perte de précision. Le tableau suivant décrit les conversions étendues qui entraînent parfois une perte d’informations.
Type | Peut être converti en |
---|---|
Int32 | Single |
UInt32 | Single |
Int64 | Single, Double |
UInt64 | Single, Double |
Decimal | Single, Double |
Conversions restrictives
Une conversion restrictive en Single ou Double peut entraîner une perte d’informations. Si le type cible ne peut pas exprimer correctement la grandeur de la source, le type résultant est défini sur la constante PositiveInfinity
ou NegativeInfinity
. PositiveInfinity
est obtenu en divisant un nombre positif par zéro et est également retourné quand la valeur d’un Single ou d’un Double dépasse la valeur du champ MaxValue
. NegativeInfinity
est obtenu en divisant un nombre négatif par zéro et est également retourné quand la valeur d’un Single ou d’un Double descend en dessous de la valeur du champ MinValue
. Une conversion d’un Double en Single peut avoir pour résultat PositiveInfinity
ou NegativeInfinity
.
Une conversion restrictive peut également entraîner une perte d’informations pour d’autres types de données. Toutefois, une OverflowExceptionest levée si la valeur d’un type en cours de conversion se situe en dehors de la plage spécifiée par les champs MaxValue
et MinValue
du type cible, et la conversion est vérifiée par le runtime pour garantir que la valeur du type cible ne dépasse pas sa valeur MaxValue
ou MinValue
. Les conversions effectuées avec la classe System.Convert sont toujours vérifiées de cette façon.
Le tableau suivant répertorie les conversions qui lèvent une OverflowException à l’aide de System.Convert ou de toute conversion contrôlée si la valeur du type converti se situe en dehors de la plage définie du type résultant.
Type | Peut être converti en |
---|---|
Byte | SByte |
SByte | Byte, UInt16, UInt32, UInt64 |
Int16 | Byte, SByte, UInt16 |
UInt16 | Byte, SByte, Int16 |
Int32 | Byte, SByte, Int16, UInt16,UInt32 |
UInt32 | Byte, SByte, Int16, UInt16, Int32 |
Int64 | Byte, SByte, Int16, UInt16, Int32,UInt32,UInt64 |
UInt64 | Byte, SByte, Int16, UInt16, Int32, UInt32, Int64 |
Decimal | Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64 |
Single | Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64 |
Double | Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64 |