標籤:style blog color io os 使用 ar 資料 div
基本文法與其他進階語言相通,
特殊用法1.
在枚舉後使用冒號加上資料類型可以自訂枚舉底層對應的資料類型,譬如:
1 enum CardDeckSetings : uint2 {3 SingleDeck =0x01,4 LargePictures =0x02,5 FancyNumbers =0x04,6 Animation =0x087 }
2.使用位標識來進行識別:
聲明一個包含有多個標誌的對象:
CardDeckSetings ops = CardDeckSetings.SingleDeck | CardDeckSetings.FancyNumbers | CardDeckSetings.Animation;
此時可以通過進行與運算檢測出對應位是否被設定
bool useFancyNumbers = (ops & CardDeckSetings.FancyNumbers) == CardDeckSetings.FancyNumbers;
注意此時需要在結構體前加入[Flags]標記:
1 [Flags]2 enum CardDeckSetings : uint3 {4 SingleDeck =0x01,5 LargePictures =0x02,6 FancyNumbers =0x04,7 Animation =0x088 }
設定Flags標誌主要用於在編譯器提取類似ops這樣的變數時能夠對已經進行或運算的變數進行分開處理(就是通知對ops輸出的時候進行格式化的ToString()方法進行最佳化輸出);
例如,不設定標誌位情況下
1 namespace EnumTest 2 { 3 enum CardDeckSetings : uint 4 { 5 SingleDeck =0x01, 6 LargePictures =0x02, 7 FancyNumbers =0x04, 8 Animation =0x08 9 }10 class Program11 {12 static void Main(string[] args)13 {14 CardDeckSetings ops = CardDeckSetings.SingleDeck | CardDeckSetings.FancyNumbers | CardDeckSetings.Animation;15 16 Console.WriteLine("{0}",ops);17 Console.ReadKey();18 }19 }20 }
輸出是
13
,就是1+4+8的值;
設定後的輸出就是:
SingleDeck,FancyNumbers,Animation
就是最佳化後的通過ToString值了
完整的使用方法:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace EnumTest 8 { 9 [Flags]10 enum CardDeckSetings : uint11 {12 SingleDeck =0x01,13 LargePictures =0x02,14 FancyNumbers =0x04,15 Animation =0x0816 }17 18 class MyClass19 {20 bool useSingleDeck = false;21 bool useLargePictures = false;22 bool useFancyNumbers = false;23 bool useAnimation = false;24 25 public void SetOptions(CardDeckSetings ops)26 {27 useSingleDeck = (ops & CardDeckSetings.SingleDeck) == CardDeckSetings.SingleDeck;28 useLargePictures = (ops & CardDeckSetings.LargePictures) == CardDeckSetings.LargePictures;29 useFancyNumbers = (ops & CardDeckSetings.FancyNumbers) == CardDeckSetings.FancyNumbers;30 useAnimation = (ops & CardDeckSetings.Animation) == CardDeckSetings.Animation;31 32 Console.WriteLine("ops={0}\n",ops);33 }34 35 public void PrintOptions()36 {37 Console.WriteLine("Option setting:");38 Console.WriteLine("CardDeckSetings.FancyNumbers={0}", useFancyNumbers);39 Console.WriteLine("CardDeckSetings.LargePictures={0}", useLargePictures);40 Console.WriteLine("CardDeckSetings.SingleDeck={0}", useSingleDeck);41 Console.WriteLine("CardDeckSetings.Animation={0}", useAnimation);42 }43 }44 class Program45 {46 static void Main(string[] args)47 {48 CardDeckSetings ops = CardDeckSetings.SingleDeck | CardDeckSetings.FancyNumbers | CardDeckSetings.Animation;49 50 MyClass my = new MyClass();51 my.SetOptions(ops);52 my.PrintOptions();53 Console.ReadKey();54 }55 }56 }
注意事項:
1.
可以將枚舉看成常量,因此可以在沒有枚舉執行個體的情況下直接使用枚舉名.枚舉成員訪問;
2.
不能比較不同類型的枚舉成員;
C#枚舉