我正在设计一个需要"位置的应用程序"领域。该位置的值是" 3241"," 4112"," ND"和" TRAVEL",我正在尝试设置包含这些值的enum
。
我从
开始 enum projectLocation {3241,4112,ND,TRAVEL};
但是值3241和4112表示语法错误 - identifier expected
- 表示enum
中的第一个值。如果我正确理解enum
,那是因为上述语句正在查找enum
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#文档中找不到任何引用。
答案 0 :(得分:5)
你做不到就像你想要的那样。这是另一种选择:
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
}
答案 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的重要性的读者 - 的读者来说,单独的数字可能不是非常直观在你的上下文中。