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

dww*_*n66 3 c# enums

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

我开始了

    enum projectLocation {3241,4112,ND,TRAVEL};
Run Code Online (Sandbox Code Playgroud)

但是值3241和4112表示语法错误identifier expected- 对于第一个值enum.如果我理解enum正确,那是因为上面的语句正在寻找和enum的整数indeces 的值.这是正确的假设吗?32414112

我尝试用以下内容覆盖它

    enum projectLocation {3241=0,4112,ND,TRAVEL};
Run Code Online (Sandbox Code Playgroud)

    enum projectLocation {3241=0,4112=1,ND=2,TRAVEL=3};
Run Code Online (Sandbox Code Playgroud)

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

有意义的是,enum不允许混合使用字符串和整数,而且我还有另外两个enum可以正常运行的s,它们只是字符串值的列表,证实了这个理论.有没有办法强制enum接受数值作为字符串?我无法在MSDNs C#文档中找到任何引用.

Tim*_* S. 5

你不能像你想要的那样完成它.这是另一种选择:

enum projectLocation {
    L3241=3241,
    L4112=4112,
    ND=2,
    TRAVEL=3
}
Run Code Online (Sandbox Code Playgroud)

用一个字母开始它们会使它们成为有效的枚举标识符,并且将它们的值设置为等于它们的数字可以让你做类似的事情(projectLocation)3241并获得预期的L3241值.

如果需要值32414112序列化时,请为序列化方法包含适当的属性,例如使用Json.NET:

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


Sri*_*vel 5

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

您可以_在此之前添加以解决此错误。

enum projectLocation 
{
    _3241=0,
    _4112=1,
    ND=2,
    TRAVEL=3
}
Run Code Online (Sandbox Code Playgroud)

还要注意字段,属性方法或上面提到的此标识符规则下的所有内容。

  • 第一个字符不能为数字。得到它了!那讲得通。那就是我一直在寻找的语法。谢谢。 (2认同)