原创: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 }
- enum TrafficLight
- {
- Green = 0,
- Yellow = 1,
- 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 }