繁体   English   中英

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

[英]How do I define a C# enum that includes integers as values?

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

我开始了

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

但是值3241和4112表示语法错误 - 期望的identifier expected - 对于enum的第一个值。 如果我正确理解enum ,那是因为上面的语句正在查找enum的整数indeces为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#文档中找到任何引用。

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

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
}

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

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

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

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

你需要做这样的事情:

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

要么:

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

我倾向于使用下划线。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM