枚举的简单使用
枚举是值类型,枚举只有一种类型成员——命名的整数值常量。
默认情况下第一个成员为0,每一个后继成员赋的值都比前一个成员多1。
枚举成员是静态的,他们和枚举有着相同的可访问性。
1 2 3 4 5
   | enum TrafficLight{ 	Green,Yellow,Red } TrafficLight t = TrafficLight.Green; Console.WriteLine($" {t} , { (int)t } ");//Green,0
  | 
 
注意枚举成员的ToString()方法返回的是成员名,强制转换才能看到枚举值。
枚举底层类型与显示值
可以设置底层类型:
1
   | enum TrraggicLight : ulong {...}
  | 
 
可以显式指定成员的值:
1 2 3
   | enum TrafficLight{ 	Green,Yellow=12,Red }
  | 
 
位标志
程序员经常使用单个字的不同位作为一组开/关标志的紧凑方法,枚举为这样的使用提供了便利。
使用Flags特性装饰枚举实际上是不必要的,但可以带来一些额外的遍历。
要判断标志字是否包含特定的位标志集,可以使用枚举类型的HasFlag布尔方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | class Program {     static void Main(string[] args) {         CardDeckSetting ops = CardDeckSetting.SingleDeck | CardDeckSetting.FancyNumber | CardDeckSetting.Animation;         bool useFancyNumbers = ops.HasFlag(CardDeckSetting.FancyNumber);         if(useFancyNumbers) {             Console.WriteLine("ok");         }     } } [Flags] enum CardDeckSetting : uint {     SingleDeck = 0x01,     LargePictures = 0x02,     FancyNumber = 0x04,     Animation = 0x08 }
  | 
 
Flags特性
它通知编译器、对象浏览器以及其他查看这段代码的工具,该枚举的成员不仅可以用作单独的值,还可以组合成位标志,这样浏览器就可以更恰当地解释该枚举类型的变量了。
其次,它允许枚举的ToString方法为位标志的值提供更多格式化信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | class Program {     static void Main(string[] args) {         CardDeckSetting ops = CardDeckSetting.SingleDeck | CardDeckSetting.FancyNumber | CardDeckSetting.Animation;         bool useFancyNumbers = ops.HasFlag(CardDeckSetting.FancyNumber);         //有Flags特性:SingleDeck, FancyNumber, Animation         //没有Flages特性:13         Console.WriteLine(ops);     }                                            } [Flags] enum CardDeckSetting : uint {     SingleDeck = 0x01,     LargePictures = 0x02,     FancyNumber = 0x04,     Animation = 0x08 }
  | 
 
Enum类型的一些静态方法
Enum.GetName:
参数:枚举类型对象,整数
返回:对应成员的名称
Enum.GetNames:
参数:枚举类型对象
返回:所有成员的名称且实现IEnumerable接口