web-dev-qa-db-fra.com

C # utilisant des nombres dans une énumération

Si tout va bien un quicky.

Ceci est une énumération valide

public enum myEnum
{
  a= 1,
  b= 2,
  c= 3,
  d= 4,
  e= 5,
  f= 6,
  g= 7,
  h= 0xff
};

Mais ce n'est pas

public enum myEnum
{
  1a = 1,
  2a = 2,
  3a = 3,
};

Existe-t-il un moyen d'utiliser un nombre dans une énumération. J'ai déjà du code pour remplir les listes déroulantes des énumérations, ce serait donc très pratique

35
DrLazer

Aucun identifiant en C # ne peut commencer par un nombre (pour des raisons lexicales/d'analyse). Pensez à ajouter un attribut [Description] à vos valeurs d'énumération:

public enum myEnum
{
    [Description("1A")]
    OneA = 1,
    [Description("2A")]
    TwoA = 2,
    [Description("3A")]
    ThreeA = 3,
};

Ensuite, vous pouvez obtenir la description d'une valeur enum comme celle-ci:

((DescriptionAttribute)Attribute.GetCustomAttribute(
    typeof(myEnum).GetFields(BindingFlags.Public | BindingFlags.Static)
        .Single(x => (myEnum)x.GetValue(null) == enumValue),    
    typeof(DescriptionAttribute))).Description

Sur la base du commentaire de XSA ci-dessous, je voulais développer la façon dont on pourrait rendre cela plus lisible. Plus simplement, vous pouvez simplement créer une méthode statique (extension):

public static string GetDescription(this Enum value)
{
    return ((DescriptionAttribute)Attribute.GetCustomAttribute(
        value.GetType().GetFields(BindingFlags.Public | BindingFlags.Static)
            .Single(x => x.GetValue(null).Equals(value)),
        typeof(DescriptionAttribute)))?.Description ?? value.ToString();
}

C'est à vous de décider si vous voulez en faire une méthode d'extension, et dans l'implémentation ci-dessus, je l'ai fait revenir au nom normal de l'énumération si aucun [DescriptionAttribute] a été fourni.

Vous pouvez maintenant obtenir la description d'une valeur d'énumération via:

myEnum.OneA.GetDescription()
73
Kirk Woll

Non, il n'y en a pas. C # ne permet pas aux identifiants de commencer par un chiffre.

Remarque sur l'utilisabilité de l'application: dans votre application, vous ne devez en aucun cas afficher les identifiants de code pour l'utilisateur final. Pensez à traduire les éléments d'énumération individuels en textes affichables conviviaux. Tôt ou tard, vous devrez étendre l'énumération avec un élément dont l'identifiant ne sera pas sous une forme affichable pour l'utilisateur.

MISE À JOUR: Notez que la façon d'attacher des textes affichables aux éléments d'énumération est discutée, par exemple, ici .

11
Ondrej Tucny

Un identifiant en C # (et la plupart des langues) ne peut pas commencer par un chiffre.

Si vous pouvez modifier le code qui remplit une liste déroulante avec les noms d'énumération, vous pouvez peut-être avoir un hack qui supprime un trait de soulignement principal lors du remplissage de la liste déroulante et définir votre énumération comme suit:

public enum myEnum
{
  _1a = 1,
  _2a = 2,
  _3a = 3
};

Ou si vous n'aimez pas les traits de soulignement, vous pouvez créer votre propre schéma de préfixe à supprimer (peut-être transmettre le préfixe au constructeur ou à la méthode qui remplira la liste déroulante de l'énumération).

9
Michael Burr

En aucune façon. Un identifiant valide (c'est-à-dire un membre d'énumération valide) ne peut pas commencer par un chiffre.

4
Noe

Les énumérations ne sont pas différentes des variables en termes de règles de dénomination. Par conséquent, vous ne pouvez pas commencer le nom par un nombre. De cet article , voici les principales règles de nommage des variables.

  • Le nom peut contenir des lettres, des chiffres et le caractère de soulignement (_).

    • Le premier caractère du nom doit être une lettre. Le trait de soulignement est également un premier caractère légal, mais son utilisation n'est pas recommandée au début d'un nom. Un trait de soulignement est souvent utilisé avec des commandes spéciales, et il est parfois difficile à lire.

    • La casse est importante (c'est-à-dire les lettres majuscules et minuscules). C # est sensible à la casse; ainsi, les noms count et Count font référence à deux variables différentes.

    • Les mots clés C # ne peuvent pas être utilisés comme noms de variable. Rappelons qu'un mot-clé est un mot qui fait partie du langage C #. (Une liste complète des mots clés C # se trouve à l'annexe B, "Mots clés C #".)

4
keyboardP

Les identifiants ne peuvent pas commencer par des chiffres. Cependant, ils peuvent contenir des chiffres.

4
Rohan Singh