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 

按位,算术和比较运算符返回处理基本整数值的结果。

允许在枚举和整数类型之间添加,但不允许在两个枚举之间添加。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号