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

C# Discussion :

Associer un objet à une énumération


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut Associer un objet à une énumération
    Bonjour,

    j'aimerai savoir s'il est possible d'associer un objet à une énumération ?

    Je m'explique, j'aimerai pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public enum CodeType {
        Bla = ["a", 5],
        Bli = ["b", 4],
        Blo = ["c", 2]
    }
    J'aimerai faire une telle chose car j'ai une fonction de décryptage d'une chaîne de caractère qui se base un caractère séparateur avec une longueur fixe.

    Un exemple :

    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
     
    public enum CodeType {
        Bla, // ["a", 5]
        Bli, // ["b", 4]
        Blo  // ["c", 2]
    }
     
    public class CodeDecrypt
            internal static string GetValue(string input, char key, int length)
            {
                return input.Substring(input.IndexOf(key), length);
            }
     
        public static List<Dictionary<CodeType , string>> Decrypt(string input)
        {
                 Dictionary<BarCodeType, string> values = new Dictionary<BarCodeType, string>();
     
                if (input.Contains("a"))
                {
                    values.Add(CodeType.Bla, GetValue(input, 'a', 5));
                }
                if (input.Contains("b"))
                {
                    values.Add(CodeType.Bli, GetValue(input, 'b', 4));
                }
                if (input.Contains("c"))
                {
                    values.Add(CodeType.Blo, GetValue(input, 'c', 2));
                }
                return values;
        }
     
        static void Main()
        {
            Decrypt("aABCDEbFGHIcJK");
        }
    }
    Y a forcément mieux, non?
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  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
    Citation Envoyé par Arnaud F. Voir le message
    Bonjour,

    j'aimerai savoir s'il est possible d'associer un objet à une énumération ?
    Non. Et cela n'aurait d'ailleurs pas grand interêt.

    Je m'explique, j'aimerai pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public enum CodeType {
        Bla = ["a", 5],
        Bli = ["b", 4],
        Blo = ["c", 2]
    }
    Ce n'est pas possible.

    cf. MSDN :

    The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong.
    Y a forcément mieux, non?
    Certes, mais ce n'est pas les méthodes pour analyser une chaine qui manquent, à commencer par les RegEx.
    Je ne vois pas l'utilité d'utiliser une sorte d'enum étendu dans ce cas.

  3. #3
    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
    Ce que tu proposes dans le premier extrait de code n'est pas possible en C#, un enum est juste un "nombre entier nommé".

    A mon avis la solution la plus simple est de créer un dictionnaire pour associer les données :

    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
     
    class KeyAndLength
    {
        public KeyAndLength(char key, int length)
        {
            this.Key = key;
            this.Length = length;
        }
     
        public char Key { get; private set; }
        public int Length { get; private set; }
    }
     
    static readonly Dictionary<CodeType, KeyAndLength> _codeTypeMap = CreateCodeTypeMap();
     
    static Dictionary<CodeType, KeyAndLength> CreateCodeTypeMap()
    {
        var map = new Dictionary<CodeType, KeyAndLength>();
        map.Add(CodeType.Bla, new KeyAndLength('a', 5));
        map.Add(CodeType.Bli, new KeyAndLength('b', 4));
        map.Add(CodeType.Blo, new KeyAndLength('c', 2));
    }
    Et ensuite tu utilises ce dictionnaire dans ta méthode Decrypt.

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Non. Et cela n'aurait d'ailleurs pas grand interêt.

    Certes, mais ce n'est pas les méthodes pour analyser une chaine qui manquent, à commencer par les RegEx.
    Je ne vois pas l'utilité d'utiliser une sorte d'enum étendu dans ce cas.
    Je suis bien conscient que cela n'a pas grand intérêt mais je ne voyais pas comment faire autrement.

    Pour la Regexp, je pourrais les utiliser dans ma fonction GetValue, certes, mais le problème n'est pas là.

    Citation Envoyé par tomlev Voir le message
    A mon avis la solution la plus simple est de créer un dictionnaire pour associer les données :

    [...]

    Et ensuite tu utilises ce dictionnaire dans ta méthode Decrypt.
    Cette solution me paraît en effet la plus appropriée (à savoir faire une banque de données que j'utilise par la suite.


    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

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

Discussions similaires

  1. associer un objet à une session
    Par malmzi2007 dans le forum Django
    Réponses: 2
    Dernier message: 02/01/2009, 11h37
  2. Réponses: 6
    Dernier message: 09/04/2008, 09h57
  3. Associer une liste d'objet à une clé
    Par fedfil dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 07/06/2007, 10h45
  4. Associer un mainMenu à une toolbar
    Par lil_jam63 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/10/2004, 18h48
  5. Associer un TOOLLBAR à une fenetre!!
    Par thief dans le forum MFC
    Réponses: 6
    Dernier message: 29/01/2004, 13h52

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