介紹 Flags關鍵字允許我們在使用.net 枚舉變數時,使用多個組合值 使用演示 1 [Flags] 2 enum WeekDays 3 { 4 //註意: 這裡不要將Sunday設置為0x0,至於為什麼留給大家思考 5 Monday = 0x1, 6 Tuesday = 0x2, 7 Wedne ...
介紹
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 }
只需要在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 }
運行結果