原创: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             }
 
原文地址:https://www.cnblogs.com/AdaLoong/p/5337900.html