天天看點

關于enum應用的總結

關于enum應用的總結

1、關于enum的定義

   enum Fabric{Cotton = 1,Silk = 2,Wool = 4,Rayon = 8,Other = 128}

2、符号名和常數值的互相轉換            Fabric fab = Fabric.Cotton;

   int fabNum = (int)fab;//轉換為常數值。必須使用強制轉換。           

   Fabric fabString = (Fabric)1;//常數值轉換成符号名。如果使用ToString(),則是((Fabric)1).ToString(),注意必須有括号。

   string fabType = fab.ToString();//顯示符号名

   string fabVal = fab.ToString ("D");//顯示常數值

3、獲得所有符号名的方法(具體參見Enum類)       

   public enum MyFamily

        {

            YANGZHIPING = 1,

            GUANGUIQIN = 2,

            YANGHAORAN = 4,

            LIWEI = 8,

            GUANGUIZHI = 16,

            LISIWEN = 32,

            LISIHUA = 64,

        }           

   foreach (string s in Enum.GetNames(typeof(MyFamily)))

        {

            Console.WriteLine(s);

        }

4、将枚舉作為位标志來處理

   根據下面的兩個例子,粗略地說,一方面,設定标志[Flags]或者[FlagsAttribute],則表明要将符号名列舉出來;

   另一方面,可以通過強制轉換,将數字轉換為符号名。說不準确。看下面的例子體會吧。注意:

          例一:Fabric fab = Fabric.Cotton | Fabric.Rayon | Fabric.Silk;

               Console.WriteLine("MyFabric = {0}", fab);//輸出:Fabric.Cotton | Fabric.Rayon | Fabric.Silk;

   例二:class FlagsAttributeDemo

  {

      // Define an Enum without FlagsAttribute.

      enum SingleHue : short

      {

           Black = 0,

           Red = 1,

          Green = 2,

          Blue = 4

      };

      // Define an Enum with FlagsAttribute.

      [FlagsAttribute]

      enum MultiHue : short

      {

          Black = 0,

          Red = 1,

          Green = 2,

          Blue = 4

      };

    static void Main( )

    {

        Console.WriteLine(

            "This example of the FlagsAttribute attribute /n" +

            "generates the following output." );

        Console.WriteLine(

            "/nAll possible combinations of values of an /n" +

            "Enum without FlagsAttribute:/n" );

        // Display all possible combinations of values.

        for( int val = 0; val <= 8; val++ )

            Console.WriteLine( "{0,3} - {1}", val, ( (SingleHue)val ).ToString( ) );

        Console.WriteLine( "/nAll possible combinations of values of an /n" + "Enum with FlagsAttribute:/n" );

        // Display all possible combinations of values.

        // Also display an invalid value.

        for( int val = 0; val <= 8; val++ )

            Console.WriteLine ( "{0,3} - {1}", val, ( (MultiHue)val ).ToString( ) );

    }

}

5、枚舉作為函數參數。經常和switch結合起來使用。下面舉例        public static double GetPrice(Fabric fab)

        {

            switch (fab)

            {

                case Fabric.Cotton: return (3.55);

                case Fabric.Silk: return (5.65);

                case Fabric.Wool: return (4.05);

                case Fabric.Rayon: return (3.20);

                case Fabric.Other: return (2.50);

                default: return (0.0);

            }

        }

6、上面三點一個完整的例子

        //1、enum的定義

        public enum Fabric : short

        {

            Cotton = 1,

            Silk = 2,

            Wool = 3,

            Rayon = 8,

            Other = 128

        }

        //将枚舉作為參數傳遞

        public static double GetPrice(Fabric fab)

        {

            switch (fab)

            {

                case Fabric.Cotton: return (3.55);

                case Fabric.Silk : return (5.65);

                case Fabric.Wool: return (4.05);

                case Fabric.Rayon: return (3.20);

                case Fabric.Other: return (2.50);

                default: return (0.0);

            }

        }

        public static void Main()

        {

            Fabric fab = Fabric.Cotton;

            int fabNum = (int)fab;

            string fabType = fab.ToString();

            string fabVal = fab.ToString ("D");

            double cost = GetPrice(fab);

            Console.WriteLine("fabNum = {0}/nfabType = {1}/nfabVal = {2}/n", fabNum, fabType, fabVal);

            Console.WriteLine("cost = {0}", cost);

        }

7、Enum類的使用

   Enum.IsDefinde、Enum.Parse兩種方法經常一起使用,來确定一個值或符号是否是一個枚舉的成員,然後建立一個執行個體。

   Enum.GetName列印出   一個成員的值;Enum.GetNames列印出所有成員的值。其中注意typeof的使用。這一點很重要。

        public enum MyFamily

        {

            YANGZHIPING = 1,

            GUANGUIQIN = 2,

            YANGHAORAN = 4,

            LIWEI = 8,

            GUANGUIZHI = 16,

            LISIWEN = 32,

            LISIHUA = 64,

        }

            string s = "YANGHAORAN";

            if (Enum.IsDefined(typeof(MyFamily), s))

            {

                MyFamily f = (MyFamily)Enum.Parse(typeof(MyFamily), s);

                GetMyFamily(f);

                Console.WriteLine("The name is:" + Enum. GetName(typeof(MyFamily), 2));

                string[] sa = Enum.GetNames(typeof(MyFamily));

                foreach (string ss in sa)

                {

                    Console.WriteLine(ss);

                }

            }