C#枚舉

來源:互聯網
上載者:User

標籤: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#枚舉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.