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

8.1 枚举介绍

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

8.2 枚举的用处

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

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

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

8.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
}

8.4 枚举转换实例

基础实例
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类型

8.5 枚举和string

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

枚举类型 转换 string类型

语法:

Week week=Week.星期一;

week.ToString();

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

string类型 转换 枚举类型

语法:

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

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

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

8.6 枚举案例练习

用户选择一个在线状态,接受后将用户的输入转换成枚举类型,再次打印到控制台中。
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();
    }
}

猜你喜欢

转载自blog.csdn.net/Y1RV1NG/article/details/129671043
今日推荐