c#之枚举

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);

 

image

可见通过定义[Flags属性]的or运算就可以得到两种值

不标记[Flag]

image

meetingDays = meetingDays ^ Days2.Tuesday;

 

 

 

通过^操作可以去除枚举类型

image

若要确定是否设置了特定标志,使用按位 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);
image 
Enum.GetValues:获取枚举对应的值
foreach (int i in Enum.GetValues(typeof(Days)))
    Console.WriteLine(i);

 

image

posted @ 2014-12-04 12:28  草旅虫  阅读(173)  评论(0编辑  收藏  举报