仅为某些成员指定值的枚举
本文关键字:枚举 成员 | 更新日期: 2023-09-27 18:33:10
>我有一个enum
,只有部分列表的自定义值
public enum MyEnum
{
FirstValue,
SecondValue,
ThirdValue,
ForthValue = 1,
FifthValue = 2
}
当我尝试strina name = (MyEnum)2;
名字时ThirdValue
。
但是当我将enum
更改为
public enum MyEnum
{
FirstValue = 3,
SecondValue,
ThirdValue,
ForthValue = 1,
FifthValue = 2
}
在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
}
所以你有两个成员的价值2
.
要么给他们所有值,要么不给他们任何值。其他任何事情都可能导致混乱。
C# 标准第 14.3 节说(强调我的(:
枚举成员的关联值以隐式或显式方式赋值。如果枚举成员的声明具有常量表达式初始值设定项,则该常量表达式的值(隐式转换为枚举的基础类型(是枚举成员的关联值。如果枚举成员的声明没有初始值设定项,则隐式设置其关联值,如下所示:
如果枚举成员
- 是在枚举类型中声明的第一个枚举成员,则其关联值为零。
否则,枚举成员的- 关联值是通过将文本上前面的枚举成员的关联值增加 1 来获得的。此增加的值必须在基础类型可以表示的值范围内;否则,将发生编译时错误。
枚举
值映射到始终从 0 开始的相应整数值,除非您专门更改这些值。
因此,您的第一段代码等效于以下内容:
public enum MyEnum
{
FirstValue = 0,
SecondValue = 1,
ThirdValue = 2,
ForthValue = 1,
FifthValue = 2
}
所以你可以看到 2 张映射到 ThirdValue
和 FifthValue
.
您的第二个示例等效于此:
public enum MyEnum
{
FirstValue = 3,
SecondValue = 4,
ThirdValue = 5,
ForthValue = 1,
FifthValue = 2
}
多个枚举器可以具有相同的值。 如果不想为每个枚举器指定值,只需切换定义枚举器的顺序:
public enum MyEnum
{
FourthValue = 1,
FifthValue,
FirstValue,
SecondValue,
ThirdValue
}