枚举显示数值而不是文本值

时间:2014-05-01 13:54:19

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

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

我想得到N和IC

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

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

这是我的vb代码

oBLL.StatusCode = StatusCode.N

3 个答案:

答案 0 :(得分:3)

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

即可
oBLL.StatusCode = StatusCode.N.ToString()

这将在内部调用Enum.GetValue

答案 1 :(得分:0)

这是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,应该避免使用。

答案 2 :(得分:0)

没有在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;