枚举是一个特殊的值类型,它可以让你指定一组命名的数值常量
public enum BorderSide { Left, Right, Top, Button}
BorderSide topSide = BorderSide.Top;
bool isTop = (topSide == BorderSide.Top); //True
枚举类型的底层原理
- 每个枚举都对应一个底层的整形数值(Enum.GetUnderlyingType())默认:
- 是int类型
- 0, 1, 2 。。。 会按照枚举成员的声明顺序自动赋值
- 也可以指定其他的类型作为枚举的整数类型, 例如bytte:
public enum BorderSide: byte{ Left, Right, Top, Bottom} - 也可以单独指定枚举成员对应的整数值
public enum BorderSide: byte {Left = 1, Right = 2, Top = 10, Bottom = 11} - 也可以只指定其中默写成员的数值,未被赋值的成员将接着它前面已被赋值的成员的值递增
0
- 在枚举表达式里,0数值会被编译器特殊对待, 它不需要显示的转换
BorderSide b = 0;
if (b == 0)...
- 因为枚举的第一个成员通常被当做默认值,它的默认值是0
- 组合枚举里,0没有flags
Flag Enum
- 可以对枚举的成员进行组合
- 为了避免歧义,枚举成员的需要显示的赋值,典型的就是使用2的乘幂
[Flags]
public enum BorderSides {None =0, Left = 1, Right = 2, Top = 4, Bottom = 8 }
- 可以使用位操作符, | &
BorderSides leftRight = BorderSides.Left | BorderSides.Right;
if ((leftRight & BorderSides.Left)!=0){
Console.WriteLine("Includes Lefts");
}
string formatted = leftRight.ToString(); //"Left, Right" (枚举成员名)