IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Conversion de Type


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 261
    Par défaut Conversion de Type
    Bonjour,

    Comment faire, pour savoir si une variable peut être convertie vers le type d'une autre variable ?



    merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Citation Envoyé par justgreat Voir le message
    ,
    Comment faire, pour savoir si une variable peut être convertie vers le type d'une autre variable ?
    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 .....

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    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)

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par sinople Voir le message
    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)
    Si, si. tu as parfaitement raison, mais en l'absence de précisions, je me contentais d'explorer des généralités.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 261
    Par défaut
    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

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    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...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 261
    Par défaut
    LOL cinemania
    As - tu lu ma question ? ou c'est juste comme beaucoup sur des forums,qui aiment se la raconter sans lire ils commencent à expliquer et critiquer pour montrer qu'ils connaissent ?
    Je sais très bien que ça marche pas, mais vu qu'on n'a pas compris ma question, j'ai essayé d'illustrer un peu ce qu'il me faut pour éclaircir ce que je cherche !
    Je n'ai pas écris la fonction et demander chercher moi l'erreur ! Je sais que ça ne marche pas comme ça, sinon j'aurai pas poser la question sur le forum !!
    La question est comment faire quelque chose qui ressemble à ça, mais qui marche, et non pas est ce que ça marche ou pas !!
    De même, ma question n'est pas pourquoi ça ne marche pas, pour me dire que CTYPE attends un type prédéfini car je sais ça et ça n'a rien à voir avec ma question !

    Merci en tout cas !!

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Est-ce que tu as trouvé la réponse à ta question initial? Si oui merci de signaler avec le flag résolu.

    Sinon personnellement il faudra me fournir plus d'information sur le contexte ou tu as besoin de faire ceci.

    Parce une procédure qui simule une fonction avec pour output un messagebox ou une exception j'ai personnellement un peu de peine à voir à quoi ça sert! (même si je doute pas que c'est un extrait de code à des fin d'illustration)

    Est-ce que ton objectif final est d'assigner Var2 à Var1 ? de comparer Var2 à Var1?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 261
    Par défaut
    Non , je n'ai toujours pas de réponse !!
    je t'explique :



    Le but c'est d'assigner une variable à une cellule dans un dataset !
    lA VARIABLE provient d'un fichier excel, donc avant de l'importer dans mon datatable, je dois savoir si son type est compatible, sinon je l'ignore et je passe a la suivante ligne


    Actuellement, j'ai dans mon code un endroit où j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row(actualCellIndex) = data.InnerText

    A un moment dans la boucle, j'ai est une colonne de type Decimal

    et (cellule qui provient d'excel, contient des données qui ne peuvent pas etre convertie en INT donc ça plante)


    Mon idée est de vérifier si

    la donnée est convertible au type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dt.Columns(actualCellIndex).DataType


    Pour résumer , je veux savoir si peut etre converti en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dt.Columns(actualCellIndex).DataType



    A savoir que se sont des colonnes générée dynamiquement, donc je peux pas savoir le type de colonne en avance , ni le type de la variable en avance (un utilisateur peut saisir n'importe quoi dans son Excel)

    Donc encore une fois je sais ce qu'il me faut et c'est :


    Savoir si une Variable X d'un type quelconque est convertible vers le type d'une variable X2 d'un type quelconque . Les types je ne les saurai qu'au runtime.

    Je pense que maintenant elle est claire ma question .

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    à regarder pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Function Check_Variable_Types(ByVal VarA As Object, ByVal VarB As Object) As Boolean
            Dim result As Boolean = Comparer.Equals(VarA.GetType, VarB.GetType)
            Return result
        End Function
    et j'ai testé rapide avec un petit bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim var1 As Object = 2
            Dim var2 As Object = 3.3
     
            MessageBox.Show("Type de var1 : " & var1.GetType.ToString & vbCrLf & _
                            "Type de var2 : " & var2.GetType.ToString & vbCrLf & _
                            "La comparaison donne donc : " & Check_Variable_Types(var1, var2))
     
        End Sub
    P.S. Cool justgreat, ici il neige et l'hiver s'installe insidieusement pour 6 mois... et c'est comme ça.

  11. #11
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Re:

    Dans cette situation tu ne connais pas le type de la cellule Excel, on est d'accord sur ce point. Par contre tu connais le type de la colonne de la table dans le dataset.

    Donc tu peux englobler l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row(actualCellIndex) = data.InnerText
    dans un try catch ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Try
    row(actualCellIndex) = data.InnerText
    Catch ex As Exception
    row(actualCellIndex) = valeurParDefaut
    End Try

Discussions similaires

  1. [DATE][CONVERSION] du type numerique au type date
    Par hamed dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/04/2005, 16h16
  2. Conversion de type
    Par sovitec dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2004, 14h29
  3. Conversion de type
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 10h30
  4. [MYSQL] conversion de type sur import de script
    Par sebos63 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/08/2003, 10h00
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo