枚举类型(enum 或 enumeration)是由基础整型数值类型的一组命名常量定义的值类型。要定义枚举类型,请使用 enum 关键字并指定枚举成员的名称:
enum 季节
{
春,
夏,
秋,
冬
}
默认情况下,枚举成员的关联常数值为 int 类型;它们从 0 开始,并按照定义文本顺序递增 1。可以显式指定任何其他整型数值类型作为枚举类型的基础类型。你也可以显式指定相关的常数值,如下例所示:
enum 错误代码 : ushort
{
none = 0,
未知 = 1,
连接失败 = 100,
离线读取 = 200
}
不能在枚举类型的定义中定义方法。要向枚举类型添加功能,请创建扩展方法。
枚举类型 E 的默认值是表达式 ( E ) 0 产生的值,即使 0 没有相应的枚举成员。
使用枚举类型来表示从一组互斥值或选择组合中的选择。要表示选择的组合,请将枚举类型定义为位标志。
枚举类型作为位标志
如果希望枚举类型表示选择的组合,请为这些选择定义枚举成员,以便单个选择是位字段。也就是说,这些枚举成员的关联值应该是 2 的整数次幂。然后,可以使用按位逻辑运算符 | 或 & 分别组合选项或使选项的组合相交。要指示枚举类型声明位字段,请对其应用 Flags 属性。如下面的示例所示,还可以在枚举类型的定义中包含一些典型的组合。
[Flags]
public enum 周
{
无 = 0B_0000_0000, // 0
周一 = 0B_0000_0001, // 1
周二 = 0B_0000_0010, // 2
周三 = 0B_0000_0100, // 4
周四 = 0B_0000_1000, // 8
周五 = 0B_0001_0000, // 16
周六 = 0B_0010_0000, // 32
周日 = 0B_0100_0000, // 64
周末 = 周六 | 周日, // 96
}
static void Main ( string [ ] args )
{
周 工作日 = 周 . 周一 | 周 . 周二 | 周 . 周三 | 周 . 周四 | 周 . 周五;
Console . WriteLine ( $"我们在{工作日}工作!" );
周 例会 = 周 . 周一 | 周 . 周五;
Console . WriteLine ( $"我们在{例会}开会!" );
bool Ber周四开会 = ( 例会 & 周 . 周四 ) == 周 . 周四;
Console . WriteLine ( $"我们在周四开会吗?{Ber周四开会}" );
var SuiJi = ( 周 ) 62;
Console . WriteLine ( $"{SuiJi}" );
}
上例输出:
我们在周一, 周二, 周三, 周四, 周五工作!
我们在周一, 周五开会!
我们在周四开会吗?False
周二, 周三, 周四, 周五, 周六
System . Enum 类型和枚举约束
System . Enum 类型是所有枚举类型的抽象基类。它提供了许多方法来获取关于枚举类型及其值的信息。
可以在基类约束(称为枚举约束)中使用 System . Enum 来指定类型参数是枚举类型。任何枚举类型还满足结构约束,该约束用于指定类型参数为非空值类型。
转换
对于任何枚举类型,枚举类型与其底层整型之间都存在显式转换。如果将枚举值强制转换为其基础类型,则结果是枚举成员的关联整数值。
[ Flags ]
public enum 季节
{
春 = 0B_0001,
夏 = 0B_0010,
秋 = 0B_0100,
冬 = 0B_1000,
}
static void Main(string[] args)
{
季节 Jd = 季节 . 冬;
Console . WriteLine ( $"我最喜欢的季节:{Jd},它的整数值:{( int ) Jd}" );
var Ch = ( 季节 ) 1;
Console . WriteLine ( Ch );
var Q = ( 季节 ) 4;
Console . WriteLine ( ( ( int ) Q ) );
}
上例输出:
我最喜欢的季节:冬,它的整数值:8
春
4
使用 Enum . IsDefined 方法确定枚举类型是否包含具有特定关联值的枚举成员。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。