[英]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为3241
和4112
。 这是正确的假设吗?
我尝试用以下内容覆盖它
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
值。
如果序列化时需要值为3241
和4112
,请为序列化方法包含适当的属性,例如使用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.