枚举类型是一种创建数值类型的机制,这种类型的可能取值是实现预定的,对于其中每个可能取值都有一个有意义的名称。让编译器理解底层,程序员能理解表层
例如要用0~6来表示一周七天,整数值传达含义不清。
定义枚举必须在标识符前加上关键字enum
Public enum Days
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
}
引用可以用Days.Sunday 也可以只用Sunday
可以有多个名称对应同一个数值,如让Wednesday=bbala,
编译器默认让第一个枚举对应的数值为0
也可以手动赋值,如果后面的枚举没有赋值,那么就在前面的枚举数值+1
枚举包含的所有值必须是同一种数据类型,这种类型成为底层类型。默认为int,但是也可以使用任何预定义的整数类型
有时候要对枚举进行组合,就要使用位标志枚举,可组合其中的值,用逻辑运算OR创建新的组合值,这里要保证所有的值都是2的幂次
举个例子如Monday=2=0……0010,Tuesday=4=0……0100,按位或为0……0110,相当于存储了周一和周二,相当于每个位代表不同的枚举
在简单枚举中,可以让名称None或最常见的默认名称对应0,但是位标志枚举与此不同,他要求0对应于名称None,这个值意味着所有标志都未设置。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace flags_enumeration
{
[Flags]
public enum Week
{
Sunday=0x001,
Monday=0x002,
Tuesday=0x004,
Wednesday=0x008,
Thursday=0x010,
Friday=0x020,
Saturday=0x040,
}
class Program
{
static void Main(string[] args)
{
Week MeetingDays = Week.Wednesday | Week.Tuesday | Week.Sunday;
Console.Write("开会的日期是 : ");
Console.WriteLine(MeetingDays);
Console.WriteLine(MeetingDays.HasFlag(Week.Friday));
}
}
}