已知枚举值,如何获取其名称

39

我有一个包含不同颜色的枚举类型。我想向某个函数传递一个 int 参数,并让它返回该位置的枚举中的颜色名称。

应该如何实现这个功能?


1
为什么不把枚举类型传递给方法呢?如果传入的整数值不匹配枚举类型,你期望的结果会是什么? - Rune FS
7个回答

78
return ((MyEnumClass)n).ToString();

虽然我喜欢Tomas的回答,但这个回答更加简洁明了。谢谢。 - WedTM

58
另一种选择是使用GetName静态方法:
Enum.GetName(typeof(MyEnumClass), n);

这样做的好处在于代码可以自我说明。显然它返回枚举的名称(使用ToString方法可能会比较难以实现)。


1
在查看页面上为检查用户导航到相应页面的角色而从值中获取枚举名称的情况下,帮助了我。 - Sorangwala Abbasali

14
在C# 6中,您可以使用nameof
nameof(YourEnum.Something)

导致结果:

something

7
如果您的颜色枚举命名为MyColorEnumName,请尝试:
Enum.GetName(typeof(MyColorEnumName),  enumColorValue)

2

如果您关心性能,请注意不要使用此处提供的任何建议:它们都使用反射来为枚举类型提供字符串值。 如果您最需要的是字符串值,则最好使用字符串。如果您仍然需要类型安全,请定义一个类和一个集合来定义您的“枚举”,并让该类在ToString()重写中回显其名称。


为什么C#中许多看似简单的东西都会对性能产生痛苦的影响? - Loren Pechtel
2
因为它是一种编程语言? - jedmao
1
这不是常见的操作 - 枚举名称甚至不能包含空格,因此您很少想将它们用作某物的“友好名称”。 - mqp
使用反射枚举需要多少毫秒?除非你在循环中进行数百万次操作,否则我敢打赌它甚至无法被测量到。 - NickG

0

以下是根据颜色值获取枚举名称的示例。

  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

((YourEnum)Value).ToString()

例如。

((MyEnum)2).ToString()

注意:请记住,您的枚举类型应该被 [Flag] 修饰,并且枚举值必须大于 0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接