我enum只有部分列表的自定义值
public enum MyEnum
{
FirstValue,
SecondValue,
ThirdValue,
ForthValue = 1,
FifthValue = 2
}
Run Code Online (Sandbox Code Playgroud)
当我试着strina name = (MyEnum)2;名字的时候ThirdValue.
但是当我改变enum为
public enum MyEnum
{
FirstValue = 3,
SecondValue,
ThirdValue,
ForthValue = 1,
FifthValue = 2
}
Run Code Online (Sandbox Code Playgroud)
在strina name = (MyEnum)2;名字中FifthValue.
编译器(我正在使用Visual Studio 2012)是否仅在第一个具有自定义值时初始化自定义值?
如果ThirdValue在第一个例子中得到默认值2,那么怎么没有错误FifthValue = 2呢?
为枚举成员分配值时,编译器会为下一个成员将值递增1,除非已定义.如果没有成员具有值,则编号从0开始.
你的第一个例子,编译器正在做的是:
public enum MyEnum
{
FirstValue, // == 0
SecondValue, // == 1
ThirdValue, // == 2
ForthValue = 1,
FifthValue = 2
}
Run Code Online (Sandbox Code Playgroud)
所以你有两个有价值的成员2.
要么给它们所有的值,要么给它们没有值.任何其他事情都可能导致混乱.
C#标准,第14.3节说(强调我的):
枚举成员的关联值是隐式或显式指定的.如果枚举成员的声明具有常量表达式初始值设定项,则该常量表达式的值(隐式转换为枚举的基础类型)是枚举成员的关联值.如果枚举成员的声明没有初始值设定项,则隐式设置其关联值,如下所示:
- 如果枚举成员是枚举类型中声明的第一个枚举成员,则其关联值为零.
- 否则,通过将文本上在前的枚举成员的关联值增加1来获得枚举成员的关联值.此增加的值必须在可由基础类型表示的值范围内; 否则,发生编译时错误.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |