2010-07-25 66 views
31

我有一个枚举,其中具有不同的颜色。我想通过一些函数int并让它返回该位置的枚举中的颜色名称。当值已知时获取枚举名称

这是怎么回事?

+1

为什么不通过枚举的方法?如果int传入的值与您的枚举值不匹配,您希望得到的结果是什么? – 2011-11-02 11:35:39

回答

66
return ((MyEnumClass)n).ToString(); 
+0

虽然我喜欢托马斯的回答,但这有利于我们达到目的。 谢谢。 – WedTM 2010-07-25 06:25:38

7

如果颜色的枚举被命名为MyColorEnumName,尝试

Enum.GetName(typeof(MyColorEnumName), enumColorValue) 
54

另一种选择是使用GetName静态方法:

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

这具有以下代码说明了利益本身。很明显,它返回枚举的名称(当您使用例如ToString方法时可能有点难以实现)。

+0

帮助我在查看页面上从值中获取枚举名称以检查用户分别导航到页面的角色。 – 2016-11-05 09:24:41

2

如果您关心性能,请谨慎使用此处给出的任何建议:它们都使用反射为枚举提供字符串值。 如果字符串值是您最需要的,那么最好使用字符串。如果你仍然想要类型安全,定义一个类和一个集合来定义你的“枚举”,并让类在ToString()覆盖中回显它的名字。

+0

为什么C#中这么多显然简单的东西会带来痛苦的性能影响? – 2010-07-25 05:10:51

+2

因为它是一种编程语言? – jedmao 2010-07-25 05:16:19

+1

这不是像这是一个常见的操作 - 枚举名称甚至不能包含空格,所以你很少想用它们作为“友好名称”。 – mquander 2010-07-25 19:49:09

12

在c#6中,您可以使用nameof

nameof(YourEnum.Something) 

结果:

something 
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(); 
     } 
    }