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 :

Peux t'on énumérer les types de variables (String, integer, boolean, etc)?


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut Peux t'on énumérer les types de variables (String, integer, boolean, etc)?
    Bonjour,
    J'écrit une classe pour manipuler les fichiers INI, dans cette classe j'ai une méthode destinée à convertir la chaîne de caractères vers le type de variable attendue. Peux t'on énumérer ces types de façon à transmettre l'argument à la méthode TryToConvert ? (autrement dit remplacer vartype as string par vartype as XXXXXXX dans la méthode ci-dessous)

    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
    Private Function TryToConvert(ByVal vartype As String, ByVal Value As String) As Object
            Dim _Value As Object = Nothing
            Try
                Select Case vartype
                    Case "String"
                        _Value = Convert.ToString(Value)
                    Case "Boolean"
                        _Value = Convert.ToBoolean(Value)
                    Case "Int16"
                        _Value = Convert.ToInt16(Value)
                End Select
            Catch ex As Exception
            End Try
            Return _Value
        End Function
    Merci beaucoup pour vos retours.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pour quoi tu n'utilises pas "typeof" pour déterminer dans quel type du convertir ta valeur

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Bonjour gcorbineau,
    Je pensais que c'étais mieux de déclarer explicitement le type attendue afin d'éviter des erreurs mais peut-être en effet que je pourrais laisser le code tester lui-même le type de donnée. Dans ce cas je pourrais même supprimer mon argument vartype. Je vais tester tout ça et revenir pour donner mes résultats.
    merci beaucoup pour l'information.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il nous faudrait plus de détails, ici le typeof ne servirait à rien à mon avis

    tu recois un object, et selon le vartype qu'on te donne tu retourne un object converti
    or si tu veux le convertir, c'est que la variable n'est pas typé comme il faut en entrée, et le typeof ne sera alors pas utile si ce n'est pas typé
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il vaudrait mieux faire une méthode générique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Function TryToConvert(Of T)(ByVal Value As String) As T
        Dim ret As T
        Try
            ret = DirectCast(Convert.ChangeType(Value, GetType(T)), T)
        Catch
        End Try
        Return ret
    End Function
    Et pour l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim x = TryToConvert(Of Int32)("42")

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Merci pour vos retours, je ne me suis pas encore décidé sur la méthode à utiliser. je me pose la question de savoir si je doit déclarer le type explicitement ou laisser le code se débrouiller et deviner dans quel type ma variable doit être converti

    or si tu veux le convertir, c'est que la variable n'est pas typé comme il faut en entrée
    Je précise que la valeur à convertir est un string à la base puisque celle-ci est issue d'un fichier .ini et bien que toutes les valeurs soit enregistrées en string au final elle doivent être converties dans le bon type :
    en boolean si c'est = "True" ou "False"
    en Integer si c'est = "42"
    en string si c'est ="Texte"
    et ainsi de suite....

    le code de Tomlev fonctionne bien mais c'est une autre façon de faire la même chose que moi (en précisant le type comme paramètre de la fonction d la fonction).
    EDIT : Le code de Tomlev fait mieux que moi puisqu'il évite l'énumération dans le code de tous les cas correspondant à chaque type
    Je vais faire des tests avec typeof pour voir ce que ça donne si j'arrive à l'utiliser.

  7. #7
    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
    Bonjour,
    dans l'esprit de ce qui a été proposé plus haut, tu peux récupérer le Type du contenu de ta variable String, en le testant à partir d'une liste contenant les Types voulus :
    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
    19
    20
       Dim types As Type() = {GetType(Integer), GetType(Single), GetType(Double), GetType(Boolean), GetType(Date), GetType(String)}
     
        Private Function CherchType(ByVal val As String) As Type
     
            Dim obj As Object = Nothing
            Dim t As Type
     
            For i As Integer = 0 To types.Count - 1
                t = types(i)
                Try
                    obj = Convert.ChangeType(val, t)
                    If obj IsNot Nothing Then
                        Return t
                    End If
                Catch
                End Try
            Next
            Return Nothing
     
        End Function
    Et là la conversion devrait bien se passer, dans la plupart des cas.
    Quelques tests :
    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
            Dim val1 As String = "#5/7/2012 5:41:42 PM#"
            Dim val2 As String = "125,2"
            Dim val3 As String = "coucou"
            Dim val4 As String = "True"
            Dim val5 As String = Nothing
            Dim val6 As String = "1E120"
     
            Dim v As String = val2
            If CherchType(v) IsNot Nothing Then
                Dim t As Type = CherchType(v)
                Dim obj As Object = Convert.ChangeType(v, t)
                MessageBox.Show(t.ToString)
            Else
                MessageBox.Show("Valeur non convertible")
            End If
    Reste quelques soucis, "125.3" ou "1.0E+120" par exemple seront typés en Date et String...
    La Culture sans doute ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    merci chrismonoye pour ta contribution, j'ai vraiment besoin de tous ces exemples pour faire des choix.
    C'est plus compliqué que je le croyais dans le sens ou il y a des convertions qui se font très bien de façon implicite sans avoir besoin de préciser le type et d'autre qui se passe mal (Ex: les valeurs True ou False sont reconnus comme du texte).
    Bref, c'est pas facile d'écrire une classe propre qui fonctionne sans soucis dans ces conditions. Je ne suis pas sûre d'y parvenir, en tout cas ça va me prendre du temps.
    Je vais tester ton code pour voir comment il se comporte et ce que je peux en tirer. Merci beaucoup.

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Ton code est très interressant chrismonoye malgrés certaines convertions qui, en effet ne fonctionnent pas.
    Après avoir mûrement réfléchie je pense que c'est une erreur laisser le code décider lui-même du type de donnée pour une raison très simple c'est que dans beaucoup de cas seul le programmeur peut savoir quel est le type attendu.
    Ça veux dire que c'est plutôt la solution de Tomlev qui m'irra le mieux dans ce cas.
    Je passe en résolu et je vous remercie tous pour le travail que vous faites.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher les type de variable
    Par merlinerick dans le forum Simulink
    Réponses: 0
    Dernier message: 27/08/2009, 11h48
  2. [Débutant] problème avec les types de variables
    Par mitmit dans le forum Débuter
    Réponses: 10
    Dernier message: 14/02/2008, 11h40
  3. Problème avec les types de variable
    Par binhjuventus dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/07/2006, 12h30
  4. les types de variables.
    Par 973thom dans le forum Access
    Réponses: 2
    Dernier message: 12/07/2006, 13h39
  5. Comparer les types de variable
    Par onipif dans le forum ASP
    Réponses: 11
    Dernier message: 27/05/2004, 18h07

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