枚举类型 (enum type) 是具有一组命名常量的独特的值类型。下面的示例声明并使用一个名为 Color 的 枚举类型,该枚举具有三个常量值 Red、Green 和 Blue。
using System; enum Color { Red, Green, Blue } class Test { static void PrintColor(Color color) { switch (color) { case Color.Red: Console.WriteLine("Red"); break; case Color.Green: Console.WriteLine("Green"); break; case Color.Blue: Console.WriteLine("Blue"); break; default: Console.WriteLine("Unknown color"); break; } } static void Main() { Color c = Color.Red; PrintColor(c); PrintColor(Color.Blue); } }
每个枚举类型都有一个相应的整型类型,称为该枚举类型的基础类型 (underlying type)。没有显式声明基础类型的枚举类型所对应的基础类型是 int。
枚举类型的存储格式和取值范围由其基础类型确定。一个枚举类型的值域不受它的枚举成员限制。具体而言,一个枚举的基础类型的任何一个值都可以被强制转换为该枚举类型,成为该枚举类型的一个独特的有效值。下面的示例声明了一个名为 Alignment、基础类型为 sbyte 的枚举类型。
enum Alignment: sbyte { Left = -1, Center = 0, Right = 1 }
如前面的示例所示,枚举成员的声明中包含常量表达式,用于指定该成员的值。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。如果枚举成员声明未显式指定一个值,该成员将被赋予值零(如果它是该枚举类型中的第一个值)或前一个枚举成员(按照文本顺序)的值加 1。
可以使用类型强制转换将枚举值转换为整型值,反之亦然。例如
int i = (int)Color.Blue; // int i = 2; Color c = (Color)2; // Color c = Color.Blue;
任何枚举类型的默认值都是转换为该枚举类型的整型值零。在变量被自动初始化为默认值的情况下,该默认值就是赋予枚举类型的变量的值。为了便于获得枚举类型的默认值,文本 0 隐式地转换为任何枚举 类型。因此,下面的语句是允许的。
Color c = 0;