學習枚舉類型/FlagsAttribute屬性

來源:互聯網
上載者:User

       網上查了下資料,發現沒我想知道東西,只能自己研究一下,關於枚舉的詳細由於晚上還有點事,就不怎麼寫了下面我給大家示範一下Eum類中幾種方法Enum.IsDefined,Enum.Parse,Enum.GetName,Enum.GetNames,Enum.GetValues.

     先說一下System.Enum類,它是所有枚舉類型的抽象基類(它是一種與枚舉類型的基礎類型不同的獨特類型),所有的枚舉類型都是從它派生的,存在所有的枚舉類型和Enum類的裝箱和拆箱轉換。簡單說一下,直接上代碼了:

以下代碼最好自己複製運行一下,否則可能看不明白:

 using System;

public class EnumTest
{
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    class Test
    {
        public static void Main()
        {
          Type days=typeof(Days);
         //示範列印一個枚舉成員的枚舉名
          Console.WriteLine("1-{0}",Enum.GetName(days,1));

           // 使用GetNames示範列印所有枚舉名:
          string[] enumNames = Enum.GetNames(days);//擷取所有枚舉名
          for (int i = 0; i < enumNames.Length; i++)
          {
              Console.WriteLine("{0}-{1}",i,enumNames[i]);
          }

            //示範使用GetValue擷取並列印所有枚舉值
             int[] enumValues = (int[])Enum.GetValues(days);
             for (int i = 0; i < enumValues.Length; i++)
             {
                 Console.WriteLine("{0}-{1}",enumValues[i],(Days)i);
             }
             //示範使用IsDefined判斷枚舉中是否存在具有指定枚舉值
             Console.WriteLine("Enum.IsDefined={0}",Enum.IsDefined(days,8));
            //現在示範Enum.Parse
             //將一個或多個枚舉常數的名稱或數字值的字串表示轉換成等效的枚舉對象。
            for(int i=0;i<enumNames.Length;i++)
            {
            Console.WriteLine("{0}-{1}",i,Enum.Parse(days,i.ToString()));
                //等價於
           //Console.WriteLine("{0}-{1}", (int)(Enum.Parse(days,i.ToString())),  Enum.Parse(days,i.ToString()));
                //也等價於
              //  Console.WriteLine("{0}-{1}",i,enumNames[i]);
            }
                 Console.ReadKey();
        }
    }
}

FlagsAttribute 類

FlagsAttribute屬性就是枚舉類型的一項可選屬性。它的主要作用是可以將枚舉作為位域處理,所謂位域是單個儲存單元內相鄰二進位位的集合。通過為枚舉添加這個屬性,可以改變枚舉的一些行為來滿足我們的需要,我先瞭解下兩條基本準則,以後在研究。1.只有要對數值執行按位元運算(AND、OR、XOR)時才對枚舉使用 FlagsAttribute 自訂屬性。2. 必須用 2 的冪(即 1、2、4、8 等)定義枚舉常量。這意味著組合的枚舉常量中的各個標誌都不重疊。

下面看下我的舉例,很簡單拿個計算機試試就明白了。

 using System;

class FlagsAttributeDemo
{
    enum Color1 : short
    {
        Black = 0,
        Red = 1,
        Green = 2,
        Blue = 4
    };

    [FlagsAttribute]
    enum Color2 : short
    {
        Black = 0,
        Red = 1,
        Green = 2,
        Blue = 4
    };

    static void Main()
    {
        Console.WriteLine("測試未使用FlagsAttribute屬性");
        Color1 MyColor1 = Color1.Red | Color1.Blue & Color1.Green;
        //我先不運行計算一下看看是那個:0001|0100&0010=0001  應該是Red
        Console.WriteLine("MyColor1={0}", MyColor1);
        Color1 MyColor_1 = Color1.Red | Color1.Blue;
        //我先不運行計算一下看看是那個:0001|0100=0101  應該是5
        Console.WriteLine("MyColor_1={0}",MyColor_1);
        Console.WriteLine("測試使用FlagsAttribute屬性");
        Color2 MyColor2 = Color2.Red | Color2.Blue;
        //我先不運行計算一下看看是那個:0001|0100=0101應該是Red,Blue
        Console.WriteLine("MyColor2={0}", MyColor2);
        Console.ReadKey();
    }
}


  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.