Opérateur DirectCast (Visual Basic)

Introduit une opération de conversion de type basée sur l’héritage ou l’implémentation.

Notes

DirectCast n’utilise pas les routines d’assistance au moment de l’exécution de Visual Basic pour la conversion, de sorte qu’il peut fournir de meilleures performances que CType lors de la conversion vers et à partir du type de données Object.

Vous utilisez le mot clé DirectCast similaire à la façon dont vous utilisez la fonction CType et le mot clé de l’opérateur TryCast. Vous fournissez une expression comme premier argument et un type pour la convertir en tant que deuxième argument. DirectCast nécessite une relation d’héritage ou d’implémentation entre les types de données des deux arguments. Cela signifie qu’un type doit hériter ou implémenter l’autre type.

Erreurs et défaillances

DirectCast génère une erreur du compilateur s’il détecte qu’aucune relation d’héritage ou d’implémentation n’existe. Toutefois, l’absence d’erreur du compilateur ne garantit pas la réussite de la conversion. Si la conversion souhaitée est restrictive, elle peut échouer au moment de l’exécution. Si cela se produit, le runtime lève une erreur InvalidCastException.

Mots clés de conversion

Voici une comparaison des mots-clés de conversion de type.

Mot clé Types de données Relation d’argument Échec de l’exécution
CType Function Tous les types de données La conversion d’élargissement ou de réduction doit être définie entre les deux types de données Lève InvalidCastException
DirectCast Tous les types de données Un type doit hériter ou implémenter l’autre type Lève InvalidCastException
TryCast, opérateur Types de référence uniquement Un type doit hériter ou implémenter l’autre type Renvoie Nothing

Exemple

L’exemple suivant illustre deux utilisations de DirectCast, l’une qui échoue au moment de l’exécution et l’autre qui réussit.

Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)

Dans l’exemple précédent, le type de runtime de q est Double. CType réussit, car Double peut être converti en Integer. Toutefois, le premier DirectCast échoue au moment de l’exécution, car le type de runtime de Double n’a aucune relation d’héritage avec Integer, même s’il existe une conversion. La seconde DirectCast réussit, car elle convertit de type Form en type Control, dont Form hérite.

Voir aussi