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

你可能感兴趣的:(C#)