1C#中的枚举

C#中的枚举

枚举就是一个变量类型 ,就像int--double string decimal.
只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。
枚举声明位置应该和类差不多,不能放在方法里。

语法:

[public] enum 枚举名
{
	值1,
	值2,
	值3,
	........
}

我们可以将一个枚举类型的变量跟int类型和string类型互相转换。

  • 1枚举类型默认是跟int类型相互兼容的,所以可以通过强制类型转换的语法互相转换int和枚举
如下,声明一个qq状态的枚举:
public enum QQState
    {
        OnLine,
        OffLine,
        Leave,
        Busy,
        QMe
    }
转换为int类型
QQState qq = QQState.OnLine;

            int a1 = (int)qq;

            Console.WriteLine(a1);

            Console.WriteLine((int)QQState.OffLine);

            Console.WriteLine((int)QQState.Leave);

            Console.WriteLine((int)QQState.Busy);

            Console.WriteLine((int)QQState.QMe);

输出可以看到转为为int后,结果就是枚举的下标,如图:

可以在创建枚举时候给他初始化下标,如果不初始化下标默认下标从0开始:
public enum QQState
    {
        OnLine=1,
        OffLine,
        Leave=5,
        Busy,
        QMe
    }

这样和上面一样强制转为int输出时发现会按照初始化的下标进行输出

将int转为枚举(还是用上没有设置初始下标的枚举当例子)
int n1 = 2;

 QQState qq = (QQState)n1;

Console.WriteLine(qq);

输出结果为n1对应枚举里下标为2的枚举,如果n1为枚举里不存在的下标,比如说8,这时候不会报异常,结果输出还是8


  • 2所有类型都可以转为string,所以可以ToString()将枚举转换为string,或者强制类型转换将string转为枚举
    例如
 string n1 = QQState.Busy.ToString();

            Console.WriteLine(n1);//输出结果为Busy

将string转为枚举
将字符串转为枚举只能用Enum.Parse()或者Enum.TryParse();因为Convert是点不出来Enum的,因为可能一个类里有多个枚举类型。

 string n1 = "0";
           QQState state=  (QQState)Enum.Parse(typeof(QQState),n1);

            Console.WriteLine(state);//OnLine

解释下这个强转

在上面枚举中,如果要转换的字符串是枚举里没有的下标,那结果还是这个下标,如果是枚举里的值,结果还是这个值,如果是枚举里没有的,那就会报异常

posted @ 2021-09-22 13:29  青仙  阅读(462)  评论(0编辑  收藏  举报