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 :

Comment énumérer les types Int32, String, Boolean ?


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 Comment énumérer les types Int32, String, Boolean ?
    Bonjour à tous,
    Je suis surpris de voir qu'il n'y pas d'énumération pour les types dans le Framwork ou alors j'ai pas trouvé.
    (En ADOX il y a les DataTypeEnum mais j'utilise ADO)

    j'aurais besoin de cette énumeration créer des procédures de construction de DataColomn et j'aimerais que cela fonctionne de cette manière :
    - Retrouver cette enumération dans l’éditeur VB (pour éviter les risques d'erreurs)
    - Pouvoir passer le type en tant qu'argument à ma procédure de construction.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private sub BuildMaColonne (TableName as string, ColonneName as string, ColonneType as ColonneType)
    Dim MaTable As New DataTable(TableName)
    MaTable.Columns.Add(ColonneName, Type.GetType(ColonneType))
    End Sub
    j'ai pensais à utiliser des structures dans ce style mais je trouve ça étrange de devoir faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Public Structure ColonneType
            Const TypeInt32 as String = "System.int32"
            Const TypeString as String = "System.string"
    .....
        End Structure
    EDIT : Rajouté 'As String'

    Vous pensez que j'ai raté quelques choses ou je peux continuer en suivant cette technique ?

  2. #2
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Hello,

    Si j'ai bien compris ce que tu veux faire, je pense que tu peux le faire en utilisant la généricité (je te le fais en Csharp pour être sure de ne pas faire d'erreur de syntaxe, mais en VB.Net ça se fait aussi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void BuildMaColonne<T> (string tableName, string colonneName)
    {
        DataTable maTable = new DataTable(tableName);
        maTable.Columns.Add(colonneName, typeof(T))
    }

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    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 193
    Par défaut
    ca n'apporte rien de plus que de faire gettype(integer) car pour déterminer T il faut écrire (of integer)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    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
    J'ai pas trop compris ton problème... il y a des enum en .NET
    http://msdn.microsoft.com/en-us/libr...vs.100%29.aspx

    Cela dit ça ne correspond pas vraiment à ton besoin ; pourquoi ne pas passer directement un Type en paramètre de ta méthode ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private sub BuildMaColonne (TableName as string, ColonneName as string, ColonneType as Type)
        Dim MaTable As New DataTable(TableName)
        MaTable.Columns.Add(ColonneName, ColonneType)
    End Sub
     
    ...
     
    BuildMaColone("UneTable", "UneColonne", GetType(Int32))
    (soit dit en passant, ta méthode ne sert à rien... Elle ajoute une nouvelle colonne dans une nouvelle table, et vu que tu ne récupères jamais cette table, elle est perdue...)

  5. #5
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Oui mais ça permet d'avoir une seule fonction pour différents types et non une fonction par type. Après je ne sais pas si c'est ce qui est souhaité, vu qu'il n'y a pas le contexte d'utilisation...

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    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 193
    Par défaut
    il y a bien une utilité, c'est d'avoir moins de chose à écrire grace à l'intellisense, pratique quand on doit souvent faire appel à une méthode
    ca sert aussi à restreindre le type depuis l'écriture du code plutot que de vérifier le type et de thrower

    je vois 2 possibilités
    la 1ère c'est une enum
    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
     
    public enum Types
      integer = 1
      booleen = 2
    etc...
     
    public sub add(..., t as types)
    dim vbtype as system.type
    select case t
      case integer 
        vbtype = gettype(integer)
       case booleen
        vbtype = gettype(boolean)
     ...
       case else
         throw ...
    end select

    la 2ème que je viens de trouver alors que ca fait 2 ans que je me demande comment on fait c'est :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    ''' <completionlist cref="colType"/>
    Public NotInheritable Class colType
     
        Private Sub New(vbtype As System.Type)
            _VbType = vbtype
        End Sub
     
     
        Private _VbType As System.Type
        Public ReadOnly Property VbType As System.Type
            Get
                Return _VbType
            End Get
        End Property
     
     
     
        Private Shared _integer As New colType(GetType(Integer))
        Public Shared ReadOnly Property [Integer] As colType
            Get
                Return _integer
            End Get
        End Property
     
     
        Private Shared _bool As New colType(GetType(Boolean))
        Public Shared ReadOnly Property [Boolean] As colType
            Get
                Return _bool
            End Get
        End Property
     
     
    ...
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Sub a(tn As String, cn As String, t As colType)
            Dim dt As New DataTable(tn)
            dt.Columns.Add(cn, t.VbType)
     
        End Sub
    ca fonctionne via l'aide xml qui permet de préciser quelle classe utiliser, puis les shared property sont proposées par défaut dans l'intellisense (comme pour system.drawing.color et autres)
    il y a des chances que cette solution ne fonctionne pas en c#
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Désolée, mais je ne comprends pas trop la subtilité de ta 2ème solution.
    Franchement j'ai beau me creuser la tête, je n'arrive pas à comprendre pour quelle utilisation c'est approprié (et mieux que de la généricité), sachant que tu es obligé de définir explicitement les types que tu vas gérer...

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    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 193
    Par défaut
    je ne sais pas si le datatable permet de gérer tous les types possibles ...

    enfin il cherche à énumérer les types, or pour énumérer il faut une liste finie du moins avec une enum
    la solution 2 est la même que la solution 1 mais en différent
    elle permet de déporter le code de manière plus réutilisable, et ca fait le même effet qu'une enum au niveau de l'intellisense
    elle est utilisée par microsoft dans certains cas, comme pour les drawing.color, brush et quelques autres classes ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  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
    Merci beaucoup pour vos réponses,
    Très interressant comme solution Pol63, je la garde sous le coude pour m'en resservir.
    Finalement j'utilise les structures pour rester le plus simple possible.
    Ce n'est pas vraiment une énumération mais l'intellisense fonctionne (dès que je tape ColonneType, il me propose la liste de tout mes types).
    Par contre j'ai fait une erreur dans ma procédure, il faut remplacer le type ColonneType par un type String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private sub BuildMaColonne (TableName as string, ColonneName as string, ColonneType as String)
    Dim MaTable As New DataTable(TableName)
    MaTable.Columns.Add(ColonneName, Type.GetType(ColonneType))
    End Sub

  10. #10
    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
    Pourquoi une structure plutôt qu'une classe ?

    La seule raison pour laquelle il peut être utile de choisir une structure est si tu veux une sémantique de valeur lors du passage de paramètre, mais en l'occurrence tu ne vas jamais créer d'instance de cette structure, donc ça n'a pas de sens. Crée plutôt une classe statique (ou un module, vu qu'en fait les classes statiques n'existent pas en VB.NET...)

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/05/2012, 21h11
  2. comment gerer les types Objet(java)
    Par karray_ali dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/05/2006, 23h27
  3. Réponses: 5
    Dernier message: 29/03/2006, 12h36
  4. [C++ > C# 2.0] Comment transformer les types ?
    Par nyarla01 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 16/03/2006, 12h36
  5. [VB.NET] Comment implementer les "Type" de VB6 ?
    Par cach dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/02/2006, 10h48

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