文章目录
- 12.1 枚举
 - 12.1.1 设置底层类型和显式值
 - 12.1.2 隐式成员编号
 
- 12.2 位标志
 - 12.2.1 Flags 特性
 - 12.2.2 使用位标志的示例(*)
 
- 12.3 关于枚举的更多内容
 
12.1 枚举
- 枚举是值类型。
 - 只有一种类型的成员:命名的整数值常量。 
  
- 每个枚举成员都被赋予一个底层类型的常量值。
 - 默认情况下,第一个成员赋值为 0,后续成员的值依次递增 1。
 - 打印时将打印成员名称。
 
 
 
12.1.1 设置底层类型和显式值
 将冒号和类型名放在枚举名之后以设置底层类型:
 
 尽管枚举类型不能有重复的名称,但可以有重复的值。
 
12.1.2 隐式成员编号
 
 
12.2 位标志
 枚举可实现位标志的应用:
-  
选取足够长度的无符号类型作为枚举底层类型。
 -  
确定每个位置代表的含义。
- 通常使用十六进制法。
 
 
  图12.5 位标志的枚举声明 - C# 7.0 后可以使用二进制表示法。
 
[Flags] enum CardDeckSettings : uint { SingleDeck = 0b0001, // 位 0 LargePictures = 0b0010, // 位 1 FancyNumbers = 0b0100, // 位 2 Animation = 0b1000, // 位 3 } 
 
- 使用按位或(
|)运算符设置标志位。 
 
-  
使用按位与(
&)运算符或HasFlag方法检查是否设置了特定标志位。HasFlag方法。
 
  图12.8 使用 HasFlag 方法检查标志位 - 按位与 
&。 
 
  图12.9 使用按位与运算检查标志位  
12.2.1 Flags 特性
 Flags 特性不改变计算结果,其作用如下:
- 通知编译器等工具,该枚举可以组成位标志。
 - 允许 ToString 方法提供更多的格式化信息。
 
 
 对于上述代码,如果没有 [Flags] 特性,将会有如下输出:
 
 加上特性后,ToString 方法返回结果将会发生改变:
 
12.2.2 使用位标志的示例(*)
12.3 关于枚举的更多内容
- 成员不能有修饰符。 
  
- 枚举成员的可访问性默认和枚举本身相同。
 
 - 成员是静态的,可以随时访问。
 - 比较不同的枚举类型会导致编译时错误。
 - C# 6.0 后,可以使用 using static 来省略枚举名称。
 
 








![[Leetcode] 0094. 二叉树的中序遍历](https://img-blog.csdnimg.cn/img_convert/af1c51231ea7b48cf605ce11be36cfee.jpeg)










