我正在设计一个需要"位置"字段的应用程序.该位置的值是"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#文档中找到任何引用.
你不能像你想要的那样完成它.这是另一种选择:
enum projectLocation {
L3241=3241,
L4112=4112,
ND=2,
TRAVEL=3
}
Run Code Online (Sandbox Code Playgroud)
用一个字母开始它们会使它们成为有效的枚举标识符,并且将它们的值设置为等于它们的数字可以让你做类似的事情(projectLocation)3241并获得预期的L3241值.
如果需要值3241和4112序列化时,请为序列化方法包含适当的属性,例如使用Json.NET:
enum projectLocation {
[JsonProperty("3241")]
L3241=3241,
[JsonProperty("4112")]
L4112=4112,
ND=2,
TRAVEL=3
}
Run Code Online (Sandbox Code Playgroud)
枚举称为命名常量,因此基本上您可以为某些常量命名。名称是c#中的“标识符”,其中标识符可以包含数字,但第一个字符不能是数字。
您可以_在此之前添加以解决此错误。
enum projectLocation
{
_3241=0,
_4112=1,
ND=2,
TRAVEL=3
}
Run Code Online (Sandbox Code Playgroud)
还要注意字段,属性方法或上面提到的此标识符规则下的所有内容。