当前位置:   article > 正文

【C#基础详解】(八)枚举类型_c# 枚举

c# 枚举

8.1 枚举介绍

枚举是值类型的一种,包含一组命名的常量,枚举就是一个数据类型,就叫枚举类型,同样也是用来存储数据的。

8.2 枚举的用处

1)比如在案例中,需要重复使用到星期一到星期天这些特定的字符串,就可以来定义一个叫做星期的枚举。如果不定义成枚举,可能写法就有很多种了,比如周一、星期一、Monday等,这三种都表示同一天。

2)比如在切水果游戏中,里面有很多类型的水果,香蕉、苹果、橘子、西瓜……等,这个时候就可以定义一个叫水果的枚举类型,用于存储水果种类。

3)比如在游戏中,通常有很多职业,战士、法师、射手……等多种类型的职业,就可以定义一个叫职业的枚举类型。或者有很多类型的枪械,冲锋枪、步枪、手枪、狙击枪等,就可以定义一个叫枪械的枚举类型。

8.3 枚举语法

[public] enum 枚举名

{

值1,

值2,

值3,

……

}

public:访问修饰符,公开的公共的,哪儿都可以访问。

enum:关键字,声明枚举的关键字。

枚举名:要符合Pascal命名规范。

注意:

将枚举声明到命名空间下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。

枚举就是一个变量类型,只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。

可以声明枚举类型的变量, 如变量 c1, 用枚举类型的名称作为前缀,设置一个命名常量,来赋予枚举中的一个值。

默认情况下,enum的类型是int,枚举的第一个成员将为0,每个连续枚举成员的值将增加1。

默认枚举值
  1. enum WeekDays
  2. {
  3.     Monday, // 0
  4.     Tuesday, // 1
  5.     Wednesday, // 2
  6.     Thursday, // 3
  7.     Friday, // 4
  8.     Saturday, // 5
  9.     Sunday // 6
  10. }
为枚举成员分配值

可以为枚举成员分配不同的值。枚举成员的默认值的更改将自动按顺序向其他成员分配增量值。

甚至可以为每个成员都分配不同的值。

  1. enum WeekDays
  2. {
  3.     Monday, // 0
  4.     Tuesday, // 1
  5.     Wednesday = 3, // 3
  6.     Thursday, // 4
  7.     Friday, // 5
  8. }
字节枚举

枚举可以是任何数字数据类型,例如 byte,sbyte,short,ushort,int,uint,long 或 ulong。但是,枚举不能为字符串类型。

在enum后指定继承类型为:type。下面定义了字节 enum。

  1. enum Fruits: byte
  2. {
  3.     Apple = 1,
  4.     Banana = 5,
  5.     Pear = 6,
  6.     Watermelon = 10,
  7.     Strawberry = 11,
  8.     Pineapple = 15
  9. }

8.4 枚举转换实例

基础实例
  1. class Program
  2. {
  3.     public enum Color
  4.     {
  5.         Red, //若修改为Red=1,则序号依次累加,默认为0
  6.         Green,
  7.         Blue //注意最后一个常量值逗号可以省略
  8.     }
  9.     static void Main(string[] args)
  10.     {
  11.         Color c1 = Color.Red;
  12.         Console.WriteLine(c1);
  13.     }
  14. }

输出结果:

Red

枚举类型 强转 int类型

枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值,默认情况下,第一个枚举符号的值是0。将枚举类型强转为int类型时,默认情况下枚举元素下标从0开始,具体用法如下:

  1. public enum Color
  2. {
  3.     Red, //默认为0,若修改为Red=1,则序号依次累加
  4.     Green,
  5.     Blue //注意最后一个常量值逗号可以省略
  6. }
  7. class Program
  8. {
  9.     static void Main(string[] args)
  10.     {
  11.         int x = (int)Color.Red;
  12.         int y = (int)Color.Blue;
  13.         Console.WriteLine("Red={0}\nBlue={1}",x,y);
  14.     }
  15. }

输出结果:

Red=0

Blue=2

int类型 强转 枚举类型

如果按元素下标能成功将int类型转换成枚举类型时,就转换成相应的枚举元素的值,如果转换失败,就输出相应的int值。

  1. //声明一个枚举类型Week
  2. public enum Week
  3. {
  4.     星期一 = 10,
  5.     星期二,
  6.     星期三
  7. }
  8. class Program
  9. {
  10.     static void Main(string[] args)
  11.     {
  12.         Week week = (Week)3;
  13.         Console.WriteLine(week);
  14.         Console.WriteLine((Week)10);
  15.         Console.WriteLine((Week)100);
  16.         Console.ReadKey();
  17.     }
  18. }

输出结果:

3

星期一

100

枚举类型和string类型

8.5 枚举和string

所有的类型都能转换成string类型,包括枚举类型,调用ToString()。

枚举类型 转换 string类型

语法:

Week week=Week.星期一;

week.ToString();

可以将枚举类型与int类型和string类型相互转换。枚举类型默认和int类型时相互兼容的,所以可以通过强制类型转换的语法互相转换。当转换一个枚举中没有的值时,不会抛异常,而是将数字直接显示出来。

string类型 转换 枚举类型

语法:

要转换的枚举类型 标识符 = (要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串");

如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。

如果转换的字符串是文本,如果枚举中没有,则会抛出异常。

8.6 枚举案例练习

用户选择一个在线状态,接受后将用户的输入转换成枚举类型,再次打印到控制台中。
  1. public enum QQState
  2. {
  3.     OnLine=1,
  4.     OffLine,
  5.     Leave,
  6.     Busy,
  7.     QMe
  8. }
  9. class Program
  10. {
  11.     static void Main(string[] args)
  12.     {
  13.         Console.WriteLine("请选择您的qq在线状态 1--OnLine 2--offLine 3--Leave 4--Busy 5--QMe");
  14.         string input = Console.ReadLine();
  15.         switch (input)
  16.         {
  17.            case "1":
  18.                QQState s1 = (QQState)Enum.Parse(typeof(QQState), input);
  19.                 Console.WriteLine("您选择的在线状态是{0}", s1);
  20.                 break;
  21.             case "2":
  22.                 QQState s2 = (QQState)Enum.Parse(typeof(QQState), input);
  23.                 Console.WriteLine("您选择的在线状态是{0}", s2);
  24.                 break;
  25.             case "3":
  26.                QQState s3 = (QQState)Enum.Parse(typeof(QQState), input);
  27.                 Console.WriteLine("您选择的在线状态是{0}", s3);
  28.                 break;
  29.             case "4":
  30.                QQState s4 = (QQState)Enum.Parse(typeof(QQState), input);
  31.                 Console.WriteLine("您选择的在线状态是{0}", s4);
  32.                 break;
  33.             case "5":
  34.                QQState s5 = (QQState)Enum.Parse(typeof(QQState), input);
  35.                 Console.WriteLine("您选择的在线状态是{0}", s5);
  36.                 break;
  37.        }
  38.         Console.ReadKey();
  39.     }
  40. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/83126
推荐阅读
相关标签
  

闽ICP备14008679号