【问题标题】:Enum showing numeric value instead of text value枚举显示数值而不是文本值
【发布时间】:2014-05-01 13:54:19
【问题描述】:

下面是我的枚举。当我访问我的 Enum 时,它显示 N 为 0,IC 为 1。

我想要N和IC

 Public Enum StatusCode
    <Description("New")> _
    N

    <Description("Incomplete")> _
    IC
 End Enum

这是我的vb代码

oBLL.StatusCode = StatusCode.N

【问题讨论】:

    标签: asp.net .net vb.net enums


    【解决方案1】:

    它根本没有显示错误的值,而是显示了正确的值 (N = 0)。但是,您真正追求的是enum名称,而不是。要获取名称,您只需拨打ToString

    oBLL.StatusCode = StatusCode.N.ToString()
    

    这将在内部调用Enum.GetValue

    【讨论】:

      【解决方案2】:

      这就是Enum 所做的。它充当int 类型(或指定时的其他数字类型)的前面。由于N 是第一位,IC 是第二位,因此它们分别被分配了int 值0 和1。

      我的建议: constants 最适合您想要实现的目标。

      Public Shared Class StatusCode
          Public Const N As String = "N"
          Public Const IC As String = "IC"
      End Class
      
      ' ...
      
      oBLL.StatusCode = StatusCode.N
      

      如果你坚持使用枚举,你可以通过这种方式获取字符串表示:

      oBLL.StatusCode = Enum.GetName(StatusCode.GetType(), StatusCode.N)
      

      但请注意,在运行时获取此值意味着 reflection,应该避免这种情况。

      【讨论】:

      • 我的问题有什么解决方案?声明常量更好吗?
      • 我很想知道常量如何更适合? enum 实际上一个常量。
      • @James 归根结底是为正确的工作使用正确的类型。当然,您可以将枚举转换为其字符串表示形式,但如果您甚至没有按原样使用枚举(如帖子所示),那么声明这个枚举有什么意义呢?只需使用纯字符串常量即可。
      • @James plus,获取枚举的字符串表示意味着反射。
      • @Crono 我并不是说如果 OP 纯粹需要字符串 const 不是更好(实际上更有效)的方式。但是,我认为您的回答是非常主观的。 OP 具有与其enum 关联的属性,因此这意味着 context - 您可以为const 提供什么上下文?另一个论点是,测试int 的相等性比测试string 更有效/更可靠,因此,实际上,使用枚举 是完成这项工作的正确工具。 “...运行时意味着反射,应该避免这种情况”——又是完全主观的。
      【解决方案3】:

      没有在 VB 中测试
      但在 C# 中,我没有这种行为
      最后两行甚至没有通过编译器(不能隐式转换)

      public enum enumRole : byte { [Description("First Level Review")] fstLvlRev = 1, [Description("Second Level Review")] secLvlRev = 2 };  
      public MainWindow() {
          System.Diagnostics.Debug.WriteLine(enumRole.secLvlRev);
          enumRole ee = enumRole.secLvlRev;
          string es = enumRole.secLvlRev.ToString();
          byte eb = (byte)enumRole.secLvlRev;
      
          string ees = enumRole.secLvlRev;
          byte eeb = enumRole.secLvlRev;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多