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

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double2

Long

Long, Decimal, Single, Double2

ULong

ULong, Decimal, Single, Double2

Decimal

Decimal, Single, Double2

Single

Single, Double

Double

Double

Tout type énuméré (Enum)

Son type intégral sous-jacent et tout type auquel le type sous-jacent s'étend.

Char

Char, String

Tableau Char

Char (tableau), String

Tout type

Objet

Tout type dérivé

Tout type de base dont il est dérivé 3

Tout type

Toute interface qu'il implémente.

Nothing

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

Conversion des tableaux

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.