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 :

Enumeration de String [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Enumeration de String
    Bonjour tous le monde,
    Je cherche à faire une énumération d'objet ou à minima une énumération de string qui fonctionne comme l'Enum de base mais avec des String, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         For Each Value As String In MonEnum
                Debug.Print (Value)          ===> Doit afficher : 'Ma valeur 1' puis 'Ma valeur 2'
            Next
    Je dois pouvoir accéder aux valeur en utilisant directement le nom de l'énumération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.print MonEnum.Enum1                 ===> Doit afficher : 'Ma valeur 1'
    ....etc
    Voic ce que j'ai commencé à faire mais ca ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      Class MonEnum
            ' Enumeration de String :
            Inherits List(Of MonEnum)
            Private Value As String
            'Public Shared ReadOnly List As New List(OfMonEnum)
            Public Shared ReadOnly Enum1 As MonEnum = New MonEnum("Ma valeur 1")
            Public Shared ReadOnly Enum2 As MonEnum = New MonEnum("Ma valeur 2")
     
            Private Sub New(Value As String)
                Me.Value = Value
                Me.Add(New MonEnum(Value))
            End Sub
        End Class

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Déclarer tes valeurs en Public Shared ReadOnly est une très bonne idée pour pouvoir accéder à tes valeurs via MonEnum.Enum1.

    Il te reste à pouvoir les parcourir. Pour cela, je ferais un tableau Values en Shared ReadOnly, qui contiendrait toutes les valeurs que tu auras définies. Tu pourras ainsi accéder à ton tableau via MonEnum.Values par exemple. Je sais, ce n'est pas comme une véritable énumération, mais je pense que c'est ce que tu peux faire et qui s'y rapprochera le plus. Ainsi, le parcours des valeurs se ferait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Value As String In MonEnum.Values
       Debug.Print (Value)          ===> Doit afficher : 'Ma valeur 1' puis 'Ma valeur 2'
    Next

  3. #3
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Si le but c'est "juste" d'avoir un conteneur avec des "constantes nommées" c'est à dire que lors de l'accès à FakeEnum.Item1 ce qui nous intéresse c'est uniquement la "valeur textuelle" autant directement faire une classe avec des constantes nommées
    En ce qui concerne l'énumération ; je ne vois aucunement solution en utilisant juste le nom de la classe et comme l'a dit dorinf il faut une méthode (ou une propriété à la rigueur) pour y accéder un GetValues par exemple pour calquer le nom sur Enum.GetValues ce qui pourrait donner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public NotInheritable Class FakeEnum
        Public Const Item1 As String = "Value 1"
        Public Const Item2 As String = "Value 2"
     
        Private Sub New()
        End Sub
     
        Public Shared Iterator Function GetValues() As IEnumerable(Of String)
            Yield Item1
            Yield Item2
        End Function
    End Class
    Après s'il faut vraiment que ce qui est récupéré soit un objet, suffit juste de changer les Const en Shared ReadOnly (Property comme ça si un jour on doit rajouter du code dessus ça sera pas un breaking change) et surcharger ToString pour l'affichage

    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
    Public NotInheritable Class FakeEnum
         Private ReadOnly content As String
     
        Public Shared ReadOnly Property Item1 As New FakeEnum("Value 1")
        Public Shared ReadOnly Property Item2 As New FakeEnum("Value 2")
     
        Private Sub New(content As String)
            Me.content = content
        End Sub
     
        Public Shared Iterator Function GetValues() As IEnumerable(Of FakeEnum)
            Yield Value1
            Yield Value2
        End Function
     
        Public Overrides Function ToString() As String
            Return content
        End Function
    End Class

  4. #4
    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 conseils, j'ai utilisé la méthode de dorinf pour l'instant, je verrais à l'usage les avantages des différentes solutions.
    J'ai ajouté une méthode d’extension pour faciliter l'ajout d’éléments dans le tableau.
    Voici ce que ça donne : (j'ai pas testé mais je pense que ça devrait faire l'affaire )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Module ArrayExtensions
        <Extension()> _
        Public Sub Add(Of T)(ByRef arr As T(), item As T)
            Array.Resize(arr, arr.Length + 1)
            arr(arr.Length - 1) = item
        End Sub
    End Module
    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
     Class MonEnum
            ' Enumeration de String :
            Private Value As String
            Public Shared ReadOnly Values() As String
            Public Shared ReadOnly Enum1 As MonEnum = New MonEnum("Ma valeur 1")
            Public Shared ReadOnly Enum2 As MonEnum = New MonEnum("Ma valeur 2")
     
            Private Sub New(Value As String)
                  Me.Value = Value
                  Values.Add(Value)
            Public Overrides Function ToString() As String
                Return Me.Value
            End Function
            End Sub
     
    End Class
    EDIT : je garde la variable Privé Value finalement.

  5. #5
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    La "solution" de dorinf et la "mienne" sont en gros identiques ; par contre ce que je pige pas trop c'est le principe d'une "enum" (donc un jeu fixe de valeurs) à laquelle on peut ajouter des valeurs ; c'est un peu contradictoire
    Je pige pas trop non plus le coup de la méthode Add ; tu connais le nombre d'éléments autant directement faire un tableau de la bonne taille plutôt que des Add ou le Array.Resize va à chaque fois copier tout le tableau pour juste ajouter un élément

  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
    Ouaippp ,je comprends les questionnements ....J'ai toujours appris tout seul la programmation depuis l'époque des premières machine en Basic donc j'ai surement pris des habitudes bonnes ou mauvaises...
    Quoi qu'il en soit j'évite au maximum de coder des trucs en dures en général, le code doit pouvoir s'adapter de lui-même...Même si c'est plus de travail au final c'est plus facile de modifier/faire évoluer le code et éviter des erreurs par qu'on a oublier de redimensionner un tableau suite à l'ajout d'un nouvelle élément par exemple .

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/12/2008, 10h41
  2. [Langage] utiliser string/char comme valeur d'enumeration
    Par olobraecky dans le forum Langage
    Réponses: 4
    Dernier message: 04/11/2008, 15h13
  3. Convertir String en variable enumerée
    Par kalikut dans le forum C#
    Réponses: 3
    Dernier message: 25/07/2007, 14h49
  4. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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