• C# 中 enum的总结


    http://apps.hi.baidu.com/share/detail/23749270

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

  • 相关阅读:
    TreeList 树形控件 实现带三种状态的CheckBox
    SQL 左外连接,右外连接,全连接,内连接(转)
    在DataTable中进行数据查询 (转)
    uva10594 Data Flow最小费用流,两个代码区别不大(我没看出区别),为什么一个对,另一个超时!!
    SGU142 Keyword好题
    uva 10881
    南京理工1747(数论)WA了好多遍!
    CF161D 树形dp
    uva 11646(大水题几何分类)
    求a加到b二进制加法有多少次进位。
  • 原文地址:https://www.cnblogs.com/maomiyouai/p/2365053.html
Copyright © 2020-2023  润新知