http://www.aygfsteel.com/ebecket 返還網(wǎng)
          隨筆-140  評(píng)論-11  文章-131  trackbacks-0

          C# Enumeration
          /* from: http://blog.csdn.net/camel0564/archive/2008/07/31/2748420.aspx */

          1、關(guān)于enum的定義
          enum Fabric
          {
          Cotton = 1,
          Silk = 2,
          Wool = 4,
          Rayon = 8,
          Other = 128
          }
          2、符號(hào)名和常數(shù)值的互相轉(zhuǎn)換
           
                      Fabric fab = Fabric.Cotton;
                      int fabNum = (int)fab;//轉(zhuǎn)換為常數(shù)值。必須使用強(qiáng)制轉(zhuǎn)換。
                      Fabric fabString = (Fabric)1;//常數(shù)值轉(zhuǎn)換成符號(hào)名。如果使用ToString(),則是((Fabric)1).ToString(),注意必須有括號(hào)。

                      string fabType = fab.ToString();//顯示符號(hào)名
                      string fabVal = fab.ToString ("D");//顯示常數(shù)值
           
          3、獲得所有符號(hào)名的方法(具體參見(jiàn)Enum類(lèi))
           
                  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、將枚舉作為位標(biāo)志來(lái)處理
          根據(jù)下面的兩個(gè)例子,粗略地說(shuō),一方面,設(shè)置標(biāo)志[Flags]或者[FlagsAttribute],則表明要將符號(hào)名列舉出來(lái);另一方面,可以通過(guò)強(qiáng)制轉(zhuǎn)換,將數(shù)字轉(zhuǎn)換為符號(hào)名。說(shuō)不準(zhǔn)確。看下面的例子體會(huì)吧。注意:
                    例一:
                    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( ) );
              }
          }

          /*
          This example of the FlagsAttribute attribute
          generates the following output.

          All possible combinations of values of an
          Enum without FlagsAttribute:

            0 - Black
            1 - Red
            2 - Green
            3 - 3
            4 - Blue
            5 - 5
            6 - 6
            7 - 7
            8 - 8

          All possible combinations of values of an
          Enum with FlagsAttribute:

            0 - Black
            1 - Red
            2 - Green
            3 - Red, Green
            4 - Blue
            5 - Red, Blue
            6 - Green, Blue
            7 - Red, Green, Blue
            8 - 8
          */
          5、枚舉作為函數(shù)參數(shù)。經(jīng)常和switch結(jié)合起來(lái)使用。下面舉例
                  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、上面三點(diǎn)一個(gè)完整的例子

                  //1、enum的定義
                  public enum Fabric : short
                  {
                      Cotton = 1,
                      Silk = 2,
                      Wool = 3,
                      Rayon = 8,
                      Other = 128
                  }

                  //將枚舉作為參數(shù)傳遞
                  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類(lèi)的使用

          Enum.IsDefinde、Enum.Parse兩種方法經(jīng)常一起使用,來(lái)確定一個(gè)值或符號(hào)是否是一個(gè)枚舉的成員,然后創(chuàng)建一個(gè)實(shí)例。Enum.GetName打印出一個(gè)成員的值;Enum.GetNames打印出所有成員的值。其中注意typeof的使用。這一點(diǎn)很重要。

                  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);

          8. Enumeration變量的文字描述
          如果想要Enumeration返回一點(diǎn)有意義的string,從而用戶(hù)能知道分別代表什么, 則按如下定義:
          using System.ComponentModel;
          enum Direction
          {
              [Description("this means facing to UP (Negtive Y)")]
              UP = 1,
              [Description("this means facing to RIGHT (Positive X)")]
              RIGHT = 2,
              [Description("this means facing to DOWN (Positive Y)")]
              DOWN = 3,
              [Description("this means facing to LEFT (Negtive X)")]
              LEFT = 4
          };

          使用如下方法來(lái)獲得文字描述:
          using System.Reflection;
          using System.ComponentModel;
          public static String GetEnumDesc(Enum e)
          {
              FieldInfo EnumInfo = e.GetType().GetField(e.ToString());
              DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[]) EnumInfo.
                  GetCustomAttributes (typeof(DescriptionAttribute), false);
              if (EnumAttributes.Length > 0)
              {
                  return EnumAttributes[0].Description;
              }
              return e.ToString();
          }

          或者可以自己定義Discription Attributes:(來(lái)自:James Geurts' Blog)
          enum Direction
          {
              [EnumDescription("Rover is facing to UP (Negtive Y)")]
              UP = 1,
              [EnumDescription("Rover is facing to DOWN (Positive Y)")]
              DOWN = 2,
              [EnumDescription("Rover is facing to RIGHT (Positive X)")]
              RIGHT = 3,
              [EnumDescription("Rover is facing to LEFT (Negtive X)")]
              LEFT = 4
          }; AttributeUsage(AttributeTargets.Field)]
          public class EnumDescriptionAttribute : Attribute
          {
              private string _text = "";
              public string Text
              {
                  get { return this._text; }
              }
              public EnumDescriptionAttribute(string text)
              {
                  _text = text;
              }
          }


          本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/kofkyo/archive/2009/02/04/3861359.aspx

          posted on 2009-11-20 17:48 becket_zheng 閱讀(144) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): C#
          主站蜘蛛池模板: 阳春市| 祥云县| 子洲县| 吉水县| 微博| 澄迈县| 鄄城县| 盐源县| 彭阳县| 鱼台县| 本溪| 开化县| 五莲县| 治多县| 诸暨市| 萍乡市| 金坛市| 山东| 西和县| 儋州市| 肇东市| 沁水县| 固原市| 大足县| 铅山县| 长阳| 舞阳县| 合作市| 广德县| 南丹县| 沛县| 大竹县| 鞍山市| 西安市| 金寨县| 孟州市| 四川省| 富蕴县| 鄱阳县| 景德镇市| 雅江县|