枚举是开发者可以定义的一个类型。枚举的关键特征是它标识了一个在编译时定义的所有可能值得集合,每个值都由一个名称来引用,这就使得代码更加的易读。我们采用与类相似的语法来定义一个枚举(枚举类型的声明必须跟类是平级的),如:
enum ConnectionState { Disconnected, Connecting, Connected, Disconnecting }
要引用一个枚举值,需要为其附加枚举名称前缀。例如,要引用Connected的值,需要使用ConnectionState.Connected。在枚举值名称中,不允许使用枚举名称,根据约定,枚举名称本身应该使用单数形式,除非枚举是为标志。
默认情况下,第一个枚举值是0(技术上说,是0显式转型为基础枚举类型),后续每一项都递增1,然而可以显式的为枚举赋值,代码如下:
//显式的为枚举值赋值 enum ConnectionState : short { Disconnected, Connecting=10, Connected, Joined=Connected, Disconnecting }
枚举总是具有一个基础类型,这可能是int,uint,long和ulong,但不能使char。
事实上,枚举类型的性能完全取决于基础类型的性能。默认的基础类型为int,但是可以使用继承的语法来指定一个不同的类型。
在上面的代码中,使用的是short,而不是int。为了保持一致性,这里使用了继承的语法,但没有建立真正的继承关系。
C#不支持两个不同的枚举数组之间的直接转型。但是可以使用强制的转换,就是先转型为一个数组,在转型为第二个枚举。这里要求两个枚举具有相同的基础类型,而且必须先转型为System.Array,代码如下:
static void Main(string[] args) { ConnectionState1[] states = (ConnectionState1[])(Array)new ConnectionState2[42]; }
//枚举数组之间的转型 enum ConnectionState1 { Disconnected, Connecting, Connected, Disconnecting } enum ConnectionState2 { Disconnected, Connecting, Connected, Disconnecting }