Tapez Casting dans Visual Basic .NET
Fourni par Molly Pell, Analyste systèmes senior
Visual Basic .NET fournit deux options pour le casting.
- CType: Lance ou convertit un type en un autre type. Si les types ne correspondent pas, une coercition peut être effectuée.
- DirectCast : Convertit un type en un autre type avec de meilleures performances que CType, mais n’effectue pas de coercition si les types ne correspondent pas.
Remarque : CType inclut toutes les fonctions de conversion VB. Il s’agit de CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng et CStr.
La principale différence entre les deux est que DirectCast ne fonctionne que si le type spécifié et le type d’exécution de l’expression sont les mêmes. Cette différence n’apparaît que lors de la conversion d’un type d’objet en un type de valeur ou lors du déballage d’une valeur.
Par exemple, l’opération DirectCast suivante échouera car le type encadré de l’objet O n’est pas un entier:
Dim O Comme Objet = 1.5
Dim I Comme Entier = DirectCast(O, Entier) ‘ Provoque une erreur d’exécution.
Dim I As Integer = CType(O, Integer) ‘ Ne provoque pas d’erreur d’exécution.
L’opération DirectCast dans cet exemple, en revanche, réussira:
Dim O Comme Objet = 1
Dim I Comme Entier = DirectCast(O, Entier) ‘ Réussit.
Dim I As Integer = CType(O, Integer)’ Réussit, mais est plus lent que DirectCast
Lors de la conversion d’un objet en un type de valeur ou du déballage, l’opérateur DirectCast a de meilleures performances que l’opérateur CType. La Base Visuelle.Le compilateur NET génère quatre lignes de code IL pour DirectCast. Cependant, l’utilisation de CType amène le compilateur Visual Basic .NET à générer un appel à une méthode de conversion représentant bien plus d’une centaine de lignes de code IL. Cette méthode appelle à son tour d’autres méthodes. Dans le code critique de performance, la différence peut être substantielle. Si la coercition est nécessaire, cependant, vous devez toujours utiliser l’opération CType ou effectuer la coercition manuellement.
Par exemple:
Dim O Comme Objet = 1.5
Dim f Comme Single = DirectCast(O, Single) ‘ Cast au type d’exécution
Dim i Comme Integer = CType(f, Integer) ‘ CType est OK ici, car ce
‘cast ne déballe pas ‘f’
Conclusion
Lors de la conversion de type d’un type d’objet vers un type de valeur, ou lors du déballage, vous devez d’abord déterminer si une coercition de type est nécessaire. Si aucune contrainte n’est nécessaire (c’est-à-dire que le type encadré de la valeur est le même que le type spécifié dans l’expression cast), utilisez l’expression DirectCast pour augmenter les performances de l’application.
Cette astuce et plus détectée pour vous avec l’analyseur Total .NET! Voir Analyseur FMS .NET pour plus d’informations.