<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    http://www.tkk7.com/ebecket 返還網
    隨筆-140  評論-11  文章-131  trackbacks-0

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

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

    /*
    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、枚舉作為函數參數。經常和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);

    8. Enumeration變量的文字描述
    如果想要Enumeration返回一點有意義的string,從而用戶能知道分別代表什么, 則按如下定義:
    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
    };

    使用如下方法來獲得文字描述:
    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:(來自: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;
        }
    }


    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/kofkyo/archive/2009/02/04/3861359.aspx

    posted on 2009-11-20 17:48 becket_zheng 閱讀(141) 評論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 国产精品亚洲w码日韩中文| 亚洲熟妇无码爱v在线观看| 8x8x华人永久免费视频| 亚洲色偷偷偷综合网| 国产偷国产偷亚洲高清日韩| 99精品在线免费观看| 国产精品亚洲lv粉色| 亚洲激情中文字幕| 日本成人免费在线| 久久99热精品免费观看牛牛| 亚洲乱色熟女一区二区三区蜜臀| 亚洲人成网7777777国产| 三年片在线观看免费大全 | 亚洲国产精品乱码在线观看97| 国产老女人精品免费视频| 国产成人精品无码免费看| 国产精品亚洲va在线观看| 亚洲一区二区在线免费观看| 全部免费毛片免费播放| 亚洲网站免费观看| 又长又大又粗又硬3p免费视频 | baoyu777永久免费视频| 亚洲综合精品第一页| 亚洲视频在线观看| 久久久无码精品亚洲日韩软件 | 国产成人亚洲影院在线观看| 国产精品视频免费一区二区| 日本免费中文字幕| 日韩大片在线永久免费观看网站 | 无码av免费网站| 黄色一级视频免费| 亚洲色大网站WWW永久网站| 久久亚洲AV成人无码电影| 亚洲国产主播精品极品网红 | 亚洲成年人电影网站| 亚洲av午夜福利精品一区| 亚洲免费视频一区二区三区| 黄a大片av永久免费| 国拍在线精品视频免费观看| 无码精品一区二区三区免费视频| 国产乱子伦精品免费视频|