C# 枚举
2018-01-16 04:23 更新
C#枚举
枚举是一种特殊的值类型,是指定的数字常量组。
例子
例如:
public enum Direction { Left, Right, Top, Bottom }
我们可以使用这个枚举类型如下:
Direction topSide = Direction.Top; bool isTop = (topSide == Direction.Top); // true
基本整数值
每个枚举成员都有一个基本的整数值。
默认情况下,底层值的类型为int。
将以枚举成员的声明顺序自动分配常量0,1,2 ...。
我们可以指定一个替代整数类型,如下:
public enum Direction : byte { Left, Right, Top, Bottom }
我们还可以为每个枚举成员指定明确的底层值:
public enum Direction : byte { Left=1, Right=2, Top=10, Bottom=11 }
编译器还允许我们显式地分配一些枚举成员。
未赋值的枚举成员保持从最后一个显式值开始递增。
上述示例等效于以下内容:
public enum Direction : byte { Left=1, Right, Top=10, Bottom }
枚举转换
我们可以使用显式转换将枚举实例转换为其基础整数值:
int i = (int) Direction.Left; Direction side = (Direction) i; bool leftOrRight = (int) side <= 2;
数字文字0由编译器在枚举表达式中特别处理,不需要显式转换:
Direction b = 0; // No cast required if (b == 0) ...
枚举的第一个成员通常用作“默认”值。
对于组合枚举类型,0表示“无标志”。
标志枚举
我们可以结合枚举成员。
为了防止歧义,可组合枚举的成员需要明确赋值,通常为2的幂。
例如:
[Flags] public enum Directions { None=0, Left=1, Right=2, Top=4, Bottom=8 }
要使用组合枚举值,我们使用位运算符,例如|和&
它们对基本整数值进行操作:
Directions leftRight = Directions.Left | Directions.Right; if ((leftRight & Directions.Left) != 0) { Console.WriteLine ("Includes Left"); // Includes Left } string formatted = leftRight.ToString(); // "Left, Right" Directions s = Directions.Left; s |= Directions.Right; Console.WriteLine (s == leftRight); // True s ^= Directions.Right; // Toggles Directions.Right Console.WriteLine (s); // Left
按照惯例,当其成员可组合时,Flags属性应该始终应用于枚举类型。
为方便起见,您可以在枚举声明中包含组合成员:
[Flags] public enum Directions { None=0, Left=1, Right=2, Top=4, Bottom=8, LeftRight = Left | Right, TopBottom = Top | Bottom, All = LeftRight | TopBottom }
枚举运算符
使用枚举的运算符有:
= == != < > <= >= + -^ & | ? += -= ++ -- sizeof
按位,算术和比较运算符返回处理基本整数值的结果。
允许在枚举和整数类型之间添加,但不允许在两个枚举之间添加。
以上内容是否对您有帮助:
← C# 接口
更多建议: