赞
踩
枚举是值类型的一种,包含一组命名的常量,枚举就是一个数据类型,就叫枚举类型,同样也是用来存储数据的。
1)比如在案例中,需要重复使用到星期一到星期天这些特定的字符串,就可以来定义一个叫做星期的枚举。如果不定义成枚举,可能写法就有很多种了,比如周一、星期一、Monday等,这三种都表示同一天。
2)比如在切水果游戏中,里面有很多类型的水果,香蕉、苹果、橘子、西瓜……等,这个时候就可以定义一个叫水果的枚举类型,用于存储水果种类。
3)比如在游戏中,通常有很多职业,战士、法师、射手……等多种类型的职业,就可以定义一个叫职业的枚举类型。或者有很多类型的枪械,冲锋枪、步枪、手枪、狙击枪等,就可以定义一个叫枪械的枚举类型。
[public] enum 枚举名
{
值1,
值2,
值3,
……
}
public:访问修饰符,公开的公共的,哪儿都可以访问。
enum:关键字,声明枚举的关键字。
枚举名:要符合Pascal命名规范。
注意:
将枚举声明到命名空间下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。
枚举就是一个变量类型,只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。
可以声明枚举类型的变量, 如变量 c1, 用枚举类型的名称作为前缀,设置一个命名常量,来赋予枚举中的一个值。
默认情况下,enum的类型是int,枚举的第一个成员将为0,每个连续枚举成员的值将增加1。
默认枚举值
- enum WeekDays
- {
- Monday, // 0
- Tuesday, // 1
- Wednesday, // 2
- Thursday, // 3
- Friday, // 4
- Saturday, // 5
- Sunday // 6
- }
为枚举成员分配值
可以为枚举成员分配不同的值。枚举成员的默认值的更改将自动按顺序向其他成员分配增量值。
甚至可以为每个成员都分配不同的值。
- enum WeekDays
- {
- Monday, // 0
- Tuesday, // 1
- Wednesday = 3, // 3
- Thursday, // 4
- Friday, // 5
- }
字节枚举
枚举可以是任何数字数据类型,例如 byte,sbyte,short,ushort,int,uint,long 或 ulong。但是,枚举不能为字符串类型。
在enum后指定继承类型为:type。下面定义了字节 enum。
- enum Fruits: byte
- {
- Apple = 1,
- Banana = 5,
- Pear = 6,
- Watermelon = 10,
- Strawberry = 11,
- Pineapple = 15
- }
基础实例
- class Program
- {
- public enum Color
- {
- Red, //若修改为Red=1,则序号依次累加,默认为0
- Green,
- Blue //注意最后一个常量值逗号可以省略
- }
- static void Main(string[] args)
- {
- Color c1 = Color.Red;
- Console.WriteLine(c1);
- }
- }
输出结果:
Red
枚举类型 强转 int类型
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值,默认情况下,第一个枚举符号的值是0。将枚举类型强转为int类型时,默认情况下枚举元素下标从0开始,具体用法如下:
- public enum Color
- {
- Red, //默认为0,若修改为Red=1,则序号依次累加
- Green,
- Blue //注意最后一个常量值逗号可以省略
- }
- class Program
- {
- static void Main(string[] args)
- {
- int x = (int)Color.Red;
- int y = (int)Color.Blue;
- Console.WriteLine("Red={0}\nBlue={1}",x,y);
- }
- }
输出结果:
Red=0
Blue=2
int类型 强转 枚举类型
如果按元素下标能成功将int类型转换成枚举类型时,就转换成相应的枚举元素的值,如果转换失败,就输出相应的int值。
- //声明一个枚举类型Week
- public enum Week
- {
- 星期一 = 10,
- 星期二,
- 星期三
- }
- class Program
- {
- static void Main(string[] args)
- {
- Week week = (Week)3;
- Console.WriteLine(week);
- Console.WriteLine((Week)10);
- Console.WriteLine((Week)100);
- Console.ReadKey();
- }
- }
输出结果:
3
星期一
100
枚举类型和string类型
所有的类型都能转换成string类型,包括枚举类型,调用ToString()。
枚举类型 转换 string类型
语法:
Week week=Week.星期一;
week.ToString();
可以将枚举类型与int类型和string类型相互转换。枚举类型默认和int类型时相互兼容的,所以可以通过强制类型转换的语法互相转换。当转换一个枚举中没有的值时,不会抛异常,而是将数字直接显示出来。
string类型 转换 枚举类型
语法:
要转换的枚举类型 标识符 = (要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串");
如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。
如果转换的字符串是文本,如果枚举中没有,则会抛出异常。
用户选择一个在线状态,接受后将用户的输入转换成枚举类型,再次打印到控制台中。
- public enum QQState
- {
- OnLine=1,
- OffLine,
- Leave,
- Busy,
- QMe
- }
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("请选择您的qq在线状态 1--OnLine 2--offLine 3--Leave 4--Busy 5--QMe");
- string input = Console.ReadLine();
- switch (input)
- {
- case "1":
- QQState s1 = (QQState)Enum.Parse(typeof(QQState), input);
- Console.WriteLine("您选择的在线状态是{0}", s1);
- break;
- case "2":
- QQState s2 = (QQState)Enum.Parse(typeof(QQState), input);
- Console.WriteLine("您选择的在线状态是{0}", s2);
- break;
- case "3":
- QQState s3 = (QQState)Enum.Parse(typeof(QQState), input);
- Console.WriteLine("您选择的在线状态是{0}", s3);
- break;
- case "4":
- QQState s4 = (QQState)Enum.Parse(typeof(QQState), input);
- Console.WriteLine("您选择的在线状态是{0}", s4);
- break;
- case "5":
- QQState s5 = (QQState)Enum.Parse(typeof(QQState), input);
- Console.WriteLine("您选择的在线状态是{0}", s5);
- break;
- }
- Console.ReadKey();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。