c#中的數據類型簡介(枚舉)

C#中的數據類型簡介(枚舉)

枚舉的定義

根據MSDN上給出的定義,枚舉是一個指定的常數集,其基礎類型能夠是除Char外的任何整型。 若是沒有顯式聲明基礎類型,則使用 Int32。 Enum 是 .NET Framework 中全部枚舉的基類。其基礎類型能夠是byte、sbyte、short、ushort、int、unit、long、ulong。默認狀況下,第一個枚舉數的值爲0,而後後續的枚舉數依次加1。數組

枚舉的申明

枚舉能夠申明在命名空間下和類同級別,也可申明在類的內部。申明語法以下:ide

[access modifiers] enum <identifier> [:enum_base]函數

{ui

enum bodyspa

}3d

Access modifiers : 定義訪問修飾符,只能是public和internal,默認internalcode

Identifier:定義枚舉的名稱orm

Enum_base:定義枚舉整數的類型,默認是int(能夠定義除Char外的任何整數類型,詳見上面枚舉的定義段)blog

namespace enumDemo
{
    enum Color:byte  //基礎類型爲byte
    {
        Red,
        Orange,
        Yellow,
        Green,
        Cyan,
        Blue,
        Purple,     //能夠省略逗號
    };              //能夠省略分號

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
    enum Color:byte  //基礎類型爲byte
    {
        Red=2,       //能夠用基礎數重定義默認值,Red基礎數定義從2開始,那麼Orange基礎數爲3,後續常量值依此類推,
//可是建議基礎數據定義包含默認值,不然枚舉的實例化可能會出現問題
Orange, Yellow, Green, Cyan, Blue, Purple, };

實例化枚舉類型

實例化枚舉值能夠有三種方法繼承

1,直接賦值爲枚舉常量

2,經過枚舉值轉化賦值

3,經過構造函數實例化枚舉值

    class Program
    {
        static void Main(string[] args)
        {
            Color myColor = Color.Yellow;      //賦值枚舉常量
            Color myColor1 = (Color)4;         //賦值枚舉值,而後轉爲枚舉常量
            Color myColor2 = new Color();      //構造函數的初始化,myColor2賦值的枚舉值爲0,可是Color枚舉的最小值爲2,是一個非法值
            Console.WriteLine("my color is {0}, color value is {0:D}",myColor);
            Console.WriteLine(myColor1);
            Console.WriteLine("my color is {0},color value is {1} " ,(Color)myColor2,myColor2);
            Console.Read();
        }
    }

枚舉類型的轉化

System.Enum 類型是全部枚舉類型的抽象基類(它是一種與枚舉類型的基礎類型不一樣的獨特類型),而且從 System.Enum 繼承的成員在任何枚舉類型中均可用。存在從任何枚舉類型到System.Enum 的裝箱轉換,而且存在從 System.Enum 到任何枚舉類型的取消裝箱轉換。System.Enum 自己不是枚舉類型。相反,它是一個類類型,全部枚舉類型都是從它派生的。類型 System.Enum 從類型 System.ValueType派生,然後者又從類型 object 派生。在運行時,類型 System.Enum 的值能夠是 null 或是對任何枚舉類型的裝了箱的值的引用。

    class Program
    {
        static void Main(string[] args)
        {
            Color color1 = (Color)6;             // 將整數轉化爲枚舉常量
            int int1 = (int)Color.Green;         // 將枚舉常量轉化爲整數
            Console.WriteLine(int1);
            string[] format = { "G", "F", "X", "D" };
            foreach (string f in format)
            {
                string colorStr = color1.ToString(f); //格式化輸出
                Console.WriteLine(colorStr);
            }
            Console.WriteLine("Color Format is: {0}",  Enum.Format(typeof(Color), (byte)7, "G"));      //經過format方法格化將枚舉值轉爲string
            Console.WriteLine("Color Constant is :{0}", Enum.GetName(typeof(Color), (byte)8));         //經過GetName方法將枚舉值轉化爲string,8默認是int類型需轉化爲Color的基礎類型byte
            foreach (string item in Enum.GetNames(typeof(Color)))          //經過GetName方法將枚舉轉化爲string數組
                Console.WriteLine("Color Name Constant is :{0}", item);
            
            foreach (Color item in Enum.GetValues(typeof(Color)))          //經過GetValues方法轉化爲Color常量
                Console.WriteLine("Color value is {0}", item);
            if  (Enum.IsDefined(typeof(Color), (byte)4))
                Console.WriteLine("the value 4's constant is {0}", Enum.Parse(typeof(Color),"4"));
            else
                Console.WriteLine("the 4 value is not define");
            Color color2 = (Color)Enum.ToObject(typeof(Color), 4);         //經過ToObject方法將整數值轉化爲枚舉常量
            Console.WriteLine(color2);
            Color color3;
            if (Enum.TryParse("2", out color3))                            //經過TryParse試作將字符串轉換爲枚舉常量
                Console.WriteLine("The value 2 is Defined: {0}",color3);
            else
                Console.WriteLine("The value 2 is not Defined");

            if (Enum.TryParse("BLACK", out color3))                         //經過TryParse試作將字符串轉換爲枚舉常量
                Console.WriteLine("The CONSTANT BLACK is Defined: {0}", color3);
            else
                Console.WriteLine("The CONSTANT BLACK is not Defined");
            Console.Read();
        }
    }

位運算

在枚舉的申明上面加上[Flags]特性

 

    class Program
    {
        [Flags]
        enum familyPets
        {
            None = 0x0,  //定義16進制的0
            Dog = 0x01,  //定義16進制的1
            Cat = 0x02, 
            Bird = 0x04,
            Duck = 0x08,
        };

        static void Main(string[] args)
        {
            familyPets fp = familyPets.Dog | familyPets.Cat;
            Console.WriteLine("Pets: {0:G} ({0:D})", fp);   //顯示結果Dog,Cat(3),16進制1和2按位或運算結果爲3
            if (fp.HasFlag(familyPets.Cat))                 //判斷fp是否認義位域Cat
               Console.WriteLine("有寵物貓。");
            else
                Console.WriteLine("沒有寵物貓。");

            if ((fp & familyPets.Dog) == familyPets.Dog)    //fp和Dog位域按位與運算
                Console.WriteLine("有寵物Dog。");
            else
                Console.WriteLine("沒有寵物Dog。");

            if (fp == familyPets.None)                      //fp位運算的結果爲3,不爲0
                Console.WriteLine("家庭裏沒有寵物。");
            else
                Console.WriteLine("家庭裏有寵物。");                   
            Console.Read();
        }
    }
相關文章
相關標籤/搜索