Bonjour,
Comment faire, pour savoir si une variable peut être convertie vers le type d'une autre variable ?
merci d'avance
Bonjour,
Comment faire, pour savoir si une variable peut être convertie vers le type d'une autre variable ?
merci d'avance
Bonjour
La question est un peu trop vague car cela dépend de la manière dont est envisagée la conversion.
Si c'est pour tester la possibilité de faire un cast, la méthode IsAssignableFrom de la classe Type peut être employée avec profit.
Si c'est pour des conversion de types numériques, les méthodes statiques CheckIfDoubleIsInteger, CheckIfSingleIsInteger de la classe Convert peuvent être utiles.
etc, etc .....
Soit le faire avec un Ctype() et récupérer l'exception.
Soit le faire avec un TryCast() qui renvoie nothing si ça passe pas.
Néanmoins l'utilisation d'une exception est à proscrire s'il s'agit de tester la valeur (c'est à dire qu'il est normal, voir fortement probable que l'opération échoue) car la gestion des exceptions est "couteuse" en temps (et peux rendre le debuggage très chiant aussi).
Je ne crois pas qu'un CheckIfxxx négatif rend la conversion impossible mais permet de vérifier s'il n'y a pas une perte de précision (je suis vraiement pas sur de ce point)
Pour etre plus claire, voici un example de ce que j'essaye de faire, je passe deux variables Var1 et Var2, peu importe leur type (string, int, booleen etc..)
je teste si var1, peut être converti en type du var 2 ou pas !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub Check_Variable_Types(Var1 As Object, Var2 As Object) Try Dim MyType as Type Dim Resultat as object MyType = GetType(Var2) Resultat=CType(Var1, MyType) 'ça ne marche pas, il dit que MyType est non défini Msgbox "Succès" Catch ex As Exception MsgBox("Impossible de convertir") End Try end sub
L'opérateur CType attend non pas une instance de Type à l'exécution, mas un type pleinement qualifié à la compilation.
et je rejoint bluedeep...
si tu veux savoir si c'est possible, il faut utiliser la reflexion en premier lieu et regarder si les variables sont équivalentes...
classes => classes,
struct => structs
type intégraux => types intégraux,
ou que des opérateurs Narrowing ou Widening soient définis, dans ce cas, les IsAssignableFrom de Type fera lui même le nécessaire pour le savoir.
De même certaines conversions ne sont pas possibles par un simples cast et nécessite des convertions, comme par exemple transformer un tableau de byte en chaine de caractères en base 64 par la classe Convert...
Partager