如何定义包含整数作为值的C#枚举?

时间:2014-04-19 12:45:29

标签: c# enums

我正在设计一个需要"位置的应用程序"领域。该位置的值是" 3241"," 4112"," ND"和" TRAVEL",我正在尝试设置包含这些值的enum

我从

开始
    enum projectLocation {3241,4112,ND,TRAVEL};

但是值3241和4112表示语法错误 - identifier expected - 表示enum中的第一个值。如果我正确理解enum,那是因为上述语句正在查找enum 32414112的整数变量的值。这是正确的假设吗?

我尝试使用以下

覆盖它
    enum projectLocation {3241=0,4112,ND,TRAVEL};

    enum projectLocation {3241=0,4112=1,ND=2,TRAVEL=3};

但我仍然在3241值上遇到相同的语法错误。有趣的是,在这两个语句中,4112上没有语法错误,但我得到can't find the namespace or name ND...TRAVEL

enum不允许混合使用字符串和整数是有道理的,我还有两个其他enum可以正常工作,只是字符串值的列表,证实了这个理论。有没有办法强制enum接受数值作为字符串?我在MSDNs C#文档中找不到任何引用。

4 个答案:

答案 0 :(得分:5)

你做不到就像你想要的那样。这是另一种选择:

enum projectLocation {
    L3241=3241,
    L4112=4112,
    ND=2,
    TRAVEL=3
}

使用字母启动它们会使它们成为有效的枚举标识符,并将其值设置为等于其数字,这样您就可以执行(projectLocation)3241之类的操作并获得预期的L3241值。

如果序列化时需要值为32414112,请为序列化方法添加适当的属性,例如:与Json.NET:

enum projectLocation {
    [JsonProperty("3241")]
    L3241=3241,
    [JsonProperty("4112")]
    L4112=4112,
    ND=2,
    TRAVEL=3
}

答案 1 :(得分:5)

枚举被称为命名常量,所以基本上你给一些常量命名。名称是c#中的“标识符”,其中标识符可以包含数字,但第一个字符不能是数字。

您可以在此之前添加_来修复此错误。

enum projectLocation 
{
    _3241=0,
    _4112=1,
    ND=2,
    TRAVEL=3
}

另请注意字段,属性方法或上述此标识符规则下的任何内容。

答案 2 :(得分:3)

你需要做这样的事情:

enum projectLocation { v3241, v4112, ND, TRAVEL };

或:

enum projectLocation { _3241, _4112, ND, TRAVEL };

我的偏好是使用下划线。

答案 3 :(得分:1)

C#不允许成员名的第一个字符以数字开头。考虑使用@字符作为前缀,或者传达对代码的读者有用的意义的其他字符,因为对于不熟悉{{1的重要性的读者 - 的读者来说,单独的数字可能不是非常直观在你的上下文中。