web-dev-qa-db-fra.com

Obtenir le nom de l'énum quand la valeur est connue

J'ai un enum qui a des couleurs différentes. Je voudrais passer une fonction une int et lui faire renvoyer le nom de couleur qui est dans l'énum à cette position.

Quel est le moyen de faire ça?

33
WedTM
return ((MyEnumClass)n).ToString();
71
mquander

Une autre option consiste à utiliser la méthode statique GetName:

Enum.GetName(typeof(MyEnumClass), n);

Cela a l'avantage que le code parle pour lui-même. Il devrait être évident qu'il renvoie le nom de l'énumération (ce qui peut être un peu difficile à réaliser lorsque vous utilisez par exemple la méthode ToString).

55
Tomas Petricek

En c # 6, vous pouvez utiliser nameof.

nameof(YourEnum.Something)

résulte en:

something
14
jle

Si votre enum avec les couleurs est nommé MyColorEnumName, Try 

Enum.GetName(typeof(MyColorEnumName),  enumColorValue)
7
Charles Bretana

Si vous vous souciez de la performance, prenez garde à l’utilisation des suggestions données ci-dessous: elles utilisent toutes la réflexion pour donner une valeur de chaîne à l’énumération .Si la valeur de chaîne est ce dont vous avez le plus besoin, utilisez plutôt des chaînes. Si vous souhaitez toujours sécuriser le type, définissez une classe et une collection pour définir vos "enums", puis indiquez à la classe son nom dans le remplacement de ToString ().

2
Marco

Voici l'exemple pour obtenir le nom Enum en fonction de la valeur de couleur.

  class Program
     {
          //Declare Enum
          enum colors {white=0,black=1,skyblue=2,blue=3 }
      static void Main(string[] args)
        {
          // It will return single color name which is "skyblue"
             string colorName=Enum.GetName(typeof(colors),2);

          //it will returns all the color names in string array.
          //We can retrive either through loop or pass index in array.
             string[] colorsName = Enum.GetNames(typeof(colors));

         //Passing index in array and it would return skyblue color name
             string colName = colorsName[2];

             Console.WriteLine(colorName);
             Console.WriteLine(colName);
             Console.ReadLine();
        }
    }
0
Sheo Dayal Singh