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
解释下这个强转
在上面枚举中,如果要转换的字符串是枚举里没有的下标,那结果还是这个下标,如果是枚举里的值,结果还是这个值,如果是枚举里没有的,那就会报异常