【问题标题】:Get enum name when value is known当值已知时获取枚举名称
【发布时间】:2010-07-25 03:29:48
【问题描述】:

我有一个枚举,其中有不同的颜色。我想传递一些函数 int 并让它返回该位置的枚举中的颜色名称。

这样做的方法是什么?

【问题讨论】:

  • 为什么不将枚举传递给方法呢?如果传入的 int 与您的枚举值不匹配,您期望结果是什么?

标签: c# enums


【解决方案1】:
return ((MyEnumClass)n).ToString();

【讨论】:

  • 虽然我喜欢 Tomas 的回答,但这样做的好处是切中要害。谢谢。
【解决方案2】:

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

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

这样做的好处是代码不言自明。很明显,它返回了枚举的名称(例如,当您使用 ToString 方法时,这可能有点难以实现)。

【讨论】:

  • 帮助我从视图页面上的值中获取枚举名称,以检查用户的角色以分别导航到页面。
【解决方案3】:

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

nameof(YourEnum.Something)

结果:

something

【讨论】:

    【解决方案4】:

    如果您的带颜色的枚举名为MyColorEnumName,请尝试

    Enum.GetName(typeof(MyColorEnumName),  enumColorValue)
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 为什么 C# 中这么多看似简单的东西会对性能产生痛苦的影响?
      • 因为它是一种编程语言?
      • 这不是一个常见的操作——枚举名称甚至不能包含空格,所以你很少希望将它们用作某些东西的“友好名称”。
      • 在枚举上使用反射实际上需要多少毫秒?除非你每秒循环数百万次,否则我敢打赌它甚至无法测量?
      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        ((YourEnum)Value).ToString()

        例如。

        ((MyEnum)2).ToString()
        

        注意:要记住的一点,你的枚举应该用[Flag]修饰并且枚举值必须大于0。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-08
          • 1970-01-01
          • 2012-12-28
          • 1970-01-01
          • 2020-06-12
          • 1970-01-01
          • 1970-01-01
          • 2016-12-07
          相关资源
          最近更新 更多