《Illustrated C# 2012, 4th Edition》Daniel M. Solis 第11章 枚举 笔记

枚举是值类型。
枚举的成员是命名的整数常量。

枚举的成员的默认类型为int,可以声明为任意整数类型:

enum TrafficLight : ulong
{
    ...

枚举还常用作标志位。
枚举的HasFlag方法和&运算符,都可以检测一个枚举是否包含某个标志位。

bool useFancyNumbers = ops.HasFlag(CardDeckSetttings.FancyNumbers);
  • 其中CardDeckSetttings是枚举类型,ops是CardDeckSetttings的实例。
  • HasFlag的实参可以是多个枚举|运算的结果。

用作标志位的枚举常使用Flags特性修饰。
Flags特性会重载枚举的ToString()方法,打印枚举对象时,会打印它包含的各个标志位对应的枚举成员名称,而不是输出一个数字。


以上代码,当为CardDeckSetttings添加Flags特性,输出变为:

FancyNumbers
FancyNumbers, Animation

相同类型的枚举成员之间可以使用比较运算符,但不同类型的枚举不行。

枚举对应.NET的Enum类型,提供以下方法:

  1. GetName()方法接收一个枚举类型对象和一个整数,返回一个枚举成员名称。
  2. GetNames()方法接收一个枚举类型对象,返回这个枚举的所有成员名称。

GetName()和GetNames()方法示例: