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 :

Écrire des caractères spéciaux C# avec enum [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut Écrire des caractères spéciaux C# avec enum
    Bonjour,

    J'aimerais écrire des caractere spéciaux avec enum je sais que l'on peut pas car il accepte pas les caractères spéciaux mais il y a un moyen avec des libellé mais sais pas comment.

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public enum TypeLivre
    {
      science-fiction,
    }
    Le - pose problème par exemple, merci par avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonsoir,

    C'est effectivement impossible de mettre des caractères spéciaux, ils subissent les mêmes règles que les variables.

    Si tu veux libeller tes enum, soit tu utilises des attributs comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public enum TypeLivre
    { 
        [Description("Science-Fiction")] 
        ScienceFiction, 
        [Description("Cuisine du monde")]
        CuisineDuMonde, 
        [Description("Roman")]
        Roman
    }
    et tu récupères la description à l'aide de cette méthode :

    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
     
    public static string GetDescription<T>(this T e) where T : IConvertible
    {
        if (e is Enum)
        {
            Type type = e.GetType();
            Array values = System.Enum.GetValues(type);
     
            foreach (int val in values)
            {
                if (val == e.ToInt32(CultureInfo.InvariantCulture))
                {
                    var memInfo = type.GetMember(type.GetEnumName(val));
                    var descriptionAttribute = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute;
     
                    if (descriptionAttribute != null)
                    {
                        return descriptionAttribute.Description;
                    }
                }
            }
        }
     
        return null; // could also return string.Empty
      }
      return description;
    }
    Soit tu peux utiliser directement des const string que tu mets dans une classe statique. A toi de voir selon tes besoins.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    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 198
    Par défaut
    j'avais à peu près la même mais avec this Enum value au lieu de this T e, ce qui est pas plus mal
    et si je ne trouve pas l'attribut je retourne le value name de l'enum, ce qui est mieux que rien
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    J'ai deux points à soulever.

    Tout d'abord rappelons ce qu'est une enum : il s'agit d'un ensemble de valeurs (des entiers) identifiées par un nom. Il s'agit d'un outil de développement, destiné à réduire les erreurs du développeur en limitant à la compilation les valeurs qu'il peut saisir. De plus le nom rend plus explicite le contexte et le sens de la valeur. Ce nom peut être loggé, éventuellement sérilialisé et désérialisé, mais ça reste un élément technique qui n'est pas destiné à être présenté à l'utilisateur. D'ailleurs, que se passerait-il s'il fallait localiser l'application (c.à.d l'adapter à un pays et une langue) et permettre à l'utilisateur de choisir la langue de l'application ? Va-t-on faire plusieurs enum pour représenter la même chose ?

    Mon autre point concerne l'usage. Une énumération est destinée à être utilisée dans le code, en général pour adapter le traitement. On trouvera dans le code par exemple if(paramTypeLivre == TypeLivre.ScienceFiction) { ... }. Bien sûr je ne connais pas ton contexte, mais je doute que tu aies des traitements qui varient selon qu'il s'agit d'un livre de science fiction ou bien de fantasy. Par ailleurs l'énumération est définie et figée à la compilation du programme, il faut que le développeur modifie l'énumération (c.à.d modifie le code, recompile, redéploie) pour ajouter une valeur. D'un point de vue métier ne serait-il pas normal que l'utilisateur veuille ajoute un type de livre manquant (de la même manière qu'une catégorie de produits dans un catalogue) ? Un type de livre n'est donc pas un élément technique, mais bien une donnée manipulée par l'application, qui peut être représentée par sa propre classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class TypeLivre
    {
      public int Id { get; set; }
      public string Label { get; set; }
    }
     
    public class Livre
    {
      public int Id { get; set; }
      public string Titre { get; set; }
      public TypeLivre Type { get; set; }
    }
    Et là il n'y plus de problème pour gérer des caractères spéciaux dans le libellé du type de livre.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    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 198
    Par défaut
    pour le 1er point il suffit de faire un attribut qui prend une clé de traduction
    l'usage de l'enum reste encore approprié dans ce contexte

    mais en effet si l'enum peut etre agrandie par l'utilisateur ca devient forcément une table de base de données
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut
    Merci pour les réponses j'ai fais plus ou moins pareil PixelJuice, en effet j'avais déjà fais ma BDD.

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

Discussions similaires

  1. [FPDF] ecrire des valeur dans pdf avec FPDF
    Par nabilfaouzi dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 17/11/2009, 17h46
  2. Réponses: 1
    Dernier message: 03/10/2008, 11h43
  3. Réponses: 11
    Dernier message: 27/08/2008, 23h20
  4. annulation des caracteres spéciaux d'un fichier
    Par cvermtw dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/03/2008, 18h52
  5. Analyseur XML : extraction des caracteres spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/07/2005, 15h07

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