Conversions étendues et restrictives
Mise à jour : Juillet 2008
Le fait que le résultat se situe ou non dans la plage du type de données de destination constitue un élément d'information important dans la conversion de type. Dans une conversion étendue, la valeur est convertie dans un type de données capable d'accueillir toutes les valeurs possibles des données d'origine. Dans une conversion restrictive, la valeur est convertie dans un type de données susceptible de ne pas pouvoir accueillir certaines valeurs possibles des données.
Conversions étendues
Le tableau suivant répertorie les conversions étendues standard.
Type de données |
Extension aux types de données 1 |
---|---|
SByte, Short, Integer, Long, Decimal, Single, Double |
|
Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Short, Integer, Long, Decimal, Single, Double |
|
UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Integer, Long, Decimal, Single, Double2 |
|
UInteger, Long, ULong, Decimal, Single, Double2 |
|
Long, Decimal, Single, Double2 |
|
ULong, Decimal, Single, Double2 |
|
Decimal, Single, Double2 |
|
Single, Double |
|
Double |
|
Tout type énuméré (Enum) |
Son type intégral sous-jacent et tout type auquel le type sous-jacent s'étend. |
Char, String |
|
Tableau Char |
Char (tableau), String |
Tout type |
|
Tout type dérivé |
Tout type de base dont il est dérivé 3 |
Tout type |
Toute interface qu'il implémente. |
Tout type de données ou type d'objet. |
1 Par définition, chaque type de données s'élargit par lui-même.
2 Les conversions de Integer, UInteger, Long, ULong ou Decimal en Single ou Double peuvent entraîner un manque de précision, mais jamais une perte d'amplitude. Elles n'entraînent donc jamais de perte d'information.
3 Il peut sembler surprenant qu'une conversion entre un type dérivé et l'un de ses types de base soit étendue. Cela s'explique par le fait que le type dérivé contient tous les membres du type de base ; il se qualifie donc comme une instance du type de base. Dans le sens opposé, le type de base ne contient aucun nouveau membre défini par le type dérivé.
Les conversions étendues réussissent toujours au moment de l'exécution et sans jamais aucune perte de données. Vous pouvez toujours les exécuter implicitement, que l'Option Strict, instruction attribue la valeur On ou Off au commutateur de vérification de type.
Conversions restrictives
Les conversions restrictives standard sont les suivantes :
Conversions inverses des conversions étendues dans le tableau précédent (excepté que chaque type s'élargit par lui-même).
Conversions entre un type Boolean et tout type numérique (dans l'un et l'autre sens).
Conversions de n'importe quel type numérique en un type énuméré (Enum).
Conversions dans l'un et l'autre sens entre String et tout type numérique, Boolean ou Date.
Conversions entre un type de données ou un type d'objet et un type dérivé de lui.
Les conversions restrictives ne réussissent pas toujours au moment de l'exécution et peuvent échouer ou entraîner la perte de données. Une erreur se produit si le type de données de destination ne peut pas accueillir la valeur convertie. Par exemple, une conversion numérique peut provoquer un dépassement de capacité. Le compilateur ne vous permet pas d'exécuter des conversions restrictives implicitement sauf si l'Option Strict, instruction attribue la valeur Off au commutateur de vérification de type.
Remarque : |
---|
L'erreur de conversion restrictive est supprimée pour les conversions à partir des éléments d'une collection For Each…Next vers la variable de contrôle de boucle. Pour plus d'informations et d'exemples, consultez la section « Conversions restrictives » dans For Each...Next, instruction (Visual Basic). |
Utilisation des conversions restrictives
Utilisez une conversion restrictive lorsque vous savez que la valeur source peut être convertie dans le type de données de destination sans erreur ni perte de données. Par exemple, si vous avez un type String dont vous savez qu'il contient soit "True", soit "False", vous pouvez utiliser le mot clé CBool pour le convertir en Boolean.
Exceptions pendant la conversion
Étant donné que les conversions étendues aboutissent toujours, elles ne lèvent pas d'exceptions. Les conversions restrictives, lorsqu'elles échouent, lèvent le plus souvent les exceptions suivantes :
InvalidCastException — si aucune conversion n'est définie entre les deux types
OverflowException — (types intégraux uniquement) si la valeur convertie est trop grande pour le type cible
Si une classe ou une structure définit CType, fonction pour qu'il serve d'opérateur de conversion vers ou depuis cette classe ou cette structure, CType peut lever n'importe quelle exception qu'il estime appropriée. De plus, CType peut appeler des fonctions Visual Basic ou des méthodes .NET Framework qui peuvent à leur tour lever diverses exceptions.
Voir aussi
Tâches
Comment : convertir un objet en un autre type dans Visual Basic
Concepts
Types de données en Visual Basic
Conversions implicites et explicites
Modification des valeurs lors de la conversion
Conversion entre des chaînes et d'autres types
Programmation sans type dans Visual Basic
Référence
Liste des types de données (Visual Basic)
Fonctions de conversion de types de données
Autres ressources
Conversions de type en Visual Basic
Historique des modifications
Date |
Historique |
Raison |
---|---|---|
Juillet 2008 |
Ajout d'une remarque relative aux conversions restrictives et à For Each…Next. |
Commentaires client. |