[十万个为什么]__C#的Enum中Flags的用法
介绍
Flags关键字允许我们在使用.net 枚举变量时,使用多个组合值
使用演示
1 [Flags]
2 enum WeekDays
3 {
4 //注意: 这里不要将Sunday设置为0x0,至于为什么留给大家思考
5 Monday = 0x1,
6 Tuesday = 0x2,
7 Wednesday = 0x4,
8 Thursday = 0x8,
9 Friday = 0x10,
10 Saturday = 0x20,
11 Sunday = 0x40
12 }
2 enum WeekDays
3 {
4 //注意: 这里不要将Sunday设置为0x0,至于为什么留给大家思考
5 Monday = 0x1,
6 Tuesday = 0x2,
7 Wednesday = 0x4,
8 Thursday = 0x8,
9 Friday = 0x10,
10 Saturday = 0x20,
11 Sunday = 0x40
12 }
只需要在Enum上使用上[Flags]标签即可标记为可组合的枚举.下面是简单的用法:
1 static void TestEnumFlags()
2 {
3 /************Kingmoon Lab 之 enum flags 语法*********************/
4 /*用'|'将各个枚举值分开即可*/
5 WeekDays wds = WeekDays.Monday | WeekDays.Sunday | WeekDays.Tuesday;
6 Console.WriteLine("我这3天要来大姨妈:"+wds);
7 /* 我们来看看计算过程:
8 * 或运算:
9 0000 0001 --星期一 0x1
10 或 0100 0000 --星期六 0x20
11 或 0000 0010 --星期二 0x2
12 = 0100 0011 = 67
13 *换句话说: 某个位是1就代表了这个位上的值在枚举中存在
14 */
15 Console.WriteLine("这3天组合Int为: "+(int)wds);
16 /*利用上面规则来判断枚举值中是否包含某个枚举值就轻而易举*/
17 if ((wds & WeekDays.Monday) != 0)
18 Console.WriteLine("星期一是其中一天");
19 if ((wds & WeekDays.Saturday) == 0)
20 Console.WriteLine("星期六不是其中一天");
21
22 //(补充)如果将某个值去掉的话可以按照原来采用这次方式
23 /* 将星期一从枚举变量中去掉
24 * 0100 0011
25 * &1011 1111 (~WeekDays.Monday)取反
26 * =0000 0011 这样就把星期一去掉啦!
27 */
28 wds = wds & (~WeekDays.Monday);
29 Console.WriteLine("去掉星期一后的效果: "+wds);
30 }
2 {
3 /************Kingmoon Lab 之 enum flags 语法*********************/
4 /*用'|'将各个枚举值分开即可*/
5 WeekDays wds = WeekDays.Monday | WeekDays.Sunday | WeekDays.Tuesday;
6 Console.WriteLine("我这3天要来大姨妈:"+wds);
7 /* 我们来看看计算过程:
8 * 或运算:
9 0000 0001 --星期一 0x1
10 或 0100 0000 --星期六 0x20
11 或 0000 0010 --星期二 0x2
12 = 0100 0011 = 67
13 *换句话说: 某个位是1就代表了这个位上的值在枚举中存在
14 */
15 Console.WriteLine("这3天组合Int为: "+(int)wds);
16 /*利用上面规则来判断枚举值中是否包含某个枚举值就轻而易举*/
17 if ((wds & WeekDays.Monday) != 0)
18 Console.WriteLine("星期一是其中一天");
19 if ((wds & WeekDays.Saturday) == 0)
20 Console.WriteLine("星期六不是其中一天");
21
22 //(补充)如果将某个值去掉的话可以按照原来采用这次方式
23 /* 将星期一从枚举变量中去掉
24 * 0100 0011
25 * &1011 1111 (~WeekDays.Monday)取反
26 * =0000 0011 这样就把星期一去掉啦!
27 */
28 wds = wds & (~WeekDays.Monday);
29 Console.WriteLine("去掉星期一后的效果: "+wds);
30 }
运行结果