我刚刚发现了一个微妙的错误,我有一个枚举,两个名字无意中共享相同的数值(在这种情况下,红色= 10和深红色= 10).我有点惊讶这不是语法错误.
public enum Colour
{
Red=10,
Blue=11,
Green=12,
Crimson=10
}
// Debug.Write(Colour.Red==Colour.Crimson) outputs True
Run Code Online (Sandbox Code Playgroud)
是否有任何现实世界的理由为什么这种行为可能有用或者认为它应该是语法错误?
Rob*_*Day 38
public enum Colour
{
Red=10,
Rouge=10,
Blue=11,
Bleu=11,
Green=12,
Vert=12,
Black=13,
Noir=13
}
Run Code Online (Sandbox Code Playgroud)
小智 26
谨防!如果您的enum多个元素具有相同的值,则在使用时可能会出现意外结果Enum.Parse().这样做会随意返回具有请求值的第一个元素.例如,如果你有enum Car { Ford = 1, Chevy = 1, Mazda = 1},那么(Car)Enum.Parse(typeof(Car), "1")将返回Car.Ford.虽然这可能有用(我不确定为什么会这样),但在大多数情况下,它可能会让人感到困惑(特别是对于维护代码的工程师),或者在出现问题时容易被忽视.
tan*_*ius 19
我已经看到此功能有时用于"默认"值:
public enum Scope
{
Transient,
Singleton,
Default=Transient
}
Run Code Online (Sandbox Code Playgroud)
但要注意,这只是你的枚举用户的糖.仅仅因为它被称为默认,它并不意味着它是初始值.
多个枚举成员可以共享相同的关联值.这个例子
enum Color
{
Red,
Green,
Blue,
Max = Blue
}
Run Code Online (Sandbox Code Playgroud)
显示一个枚举,其中两个枚举成员 - 蓝色和最大 - 具有相同的关联值.
在这种情况下,您可以检查MyColor == Color.Max,这在某些情况下会很有用.
Enum 是常量变量的枚举,你可以有两个具有相同值的项目,我认为没有理由出现语法错误,但是,这会导致此代码中的编译错误
switch(c)
{
Colour.Red:
break;
Colour.Crimson:
break;
...
}
Run Code Online (Sandbox Code Playgroud)