msdn中的解释:即一种由一组称为枚举数列表的命名常量组成的独特类型。
声明一个简单的枚举,这个枚举规定了一周的每天
public enum Days { Sun,Mon,Tue,Wed,Thu,Fri,Sat }
如果未在枚举数列表中指定元素的值,则值将自动按 1 递增,默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1
int x = (int)Days.Sun; int y = (int)Days.Thu; Console.WriteLine("Sun:{0}", x); Console.WriteLine("Thu:{0}", y);
通过上面的例子我们可以得到sun的值是0,Thu的值是4
当然我们也可以强制元素序列从 1 而不是 0 开始
public enum Days { Sun=1,Mon,Tue,Wed,Thu,Fri,Sat }
们可以得到sun的值是1,Thu的值是5
每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型,枚举元素的默认基础类型为 int但是
从 enum 类型到整型的转换需要用显式类型转换来完成
int x = (int)Days.Sun;
位标志 bit flag
在枚举上应用[Flags]属性,就可以用枚举来表示一组可以组合的位标志,执行 AND、OR、NOT 和 XOR 按位运算,一般要定义一个值为0的None符号。
[Flags] enum Days2 { None = 0x0, Sunday = 0x1, Monday = 0x2, Tuesday = 0x4, Wednesday = 0x8, Thursday = 0x10, Friday = 0x20, Saturday = 0x40 }
Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
Console.WriteLine(meetingDays);
可见通过定义[Flags属性]的or运算就可以得到两种值
不标记[Flag]
meetingDays = meetingDays ^ Days2.Tuesday;
通过^操作可以去除枚举类型
若要确定是否设置了特定标志,使用按位 AND 运算
bool test = (meetingDays & Days2.Thursday) == Days2.Thursday; Console.WriteLine("Thursday {0} a meeting day.", test == true ? "is" : "is not");
System.Enum
Enum.GetName:获取枚举类型中的名称
string s = Enum.GetName(typeof(Days), 4); Console.WriteLine(s);
Enum.GetValues:获取枚举对应的值
foreach (int i in Enum.GetValues(typeof(Days))) Console.WriteLine(i);