zoukankan      html  css  js  c++  java
  • 原创:C sharp 中 Enum的几点小 Tips

    (1)为什么要使用Enum?

     enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储。
    enum student{a,b,c,d,e},
    其中enum代表student为枚举类型 enum枚举属于值类型 不属于引用类型。
    也就是说,a=0,b=1,c=2,d=3,e=4,
    当student.a使用该枚举时,可用一个int类型的变量来接收此值
    也就是int num = student.a ; 相当于 int num = 1;

    有些时候,我们需要向数据库里存放一些代表着标示意义的值,
    但是存字符串会增加数据库的负载能力
    于是.net便发明了这种枚举类型,用于更好的在编程过程中记忆每一个标示数字所代表的意义
    比如:
    男和女
    我们想存放在数据库中这两个值,直接存放“男”,“女”这两个char或者string值也可以
    但是最优的方式便是存放int类型的值 如0代表男,1代表女
    那么我们就创建一个枚举类
    enum gender{boy,girl}
    在取值的时候就用gender.boy来代表男 gender.girl代表女
    这时存放数据库中的值就是0和1了
    (2)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此以下两个代码定义是等价的:
    1     enum TrafficLight  
    2     {  
    3         Green,  
    4         Yellow,  
    5         Red  
    6     }  
    1. enum TrafficLight  
    2. {  
    3.     Green = 0,  
    4.     Yellow = 1,  
    5.     Red = 2  
    (3)enum枚举类型的变量的名字不能相同,但是值可以相同,例如:
    1 num TrafficLight  
    2 {  
    3     Green = 0,  
    4     Yellow = 1,     // Duplicate value, OK   
    5     Red = 1         // Duplicate value, OK   
    6 }  
    
    

    (4)如果enum中的部分成员显式定义了值,而部分没有;那么没有定义值的成员还是会按照上一个成员的值来递增赋值,例如:

     1     enum LoopType  
     2     {  
     3         None,          // value is 0    
     4         Daily,         // value is 1    
     5         Weekly = 7,  
     6         Monthly,       // value is 8    
     7         Yeayly,        // value is 9    
     8         DayGap = 15,           
     9         WeekGap,       // value is 16    
    10         MonthGap,      // value is 17    
    11         YearGap        // value is 18    
    12     }  

    (5)enum枚举成员可以用来作为位标志,同时支持位的操作(位与,位或等等),例如:???

    bite
    1     enum CardDeckSettings : uint  
    2     {  
    3         SingleDeck = 0x01,      // Bit 0  
    4         LargePictures = 0x02,   // Bit 1  
    5         FancyNumbers = 0x04,    // Bit 2  
    6         Animation = 0x08        // Bit 3      
    7     }  

    十六进制数的一个作用就是用来进行位运算和操作,很方便。

    (6)获得所有符号名的方法

     1 public enum MyFamily
     2         {
     3             YANGZHIPING = 1,
     4             GUANGUIQIN = 2,
     5 
     6             YANGHAORAN = 4,
     7             LIWEI = 8,
     8 
     9             GUANGUIZHI = 16,
    10             LISIWEN = 32,
    11             LISIHUA = 64,
    12         } 
    13 
    14             foreach (string s in Enum.GetNames(typeof(MyFamily)))//注意typeof  Hanson.Ada
    15             {
    16                 Console.WriteLine(s);
    17             }
     
  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/AdaLoong/p/5337900.html
Copyright © 2011-2022 走看看