namespace _04.枚举类型的练习01{ //声明一个QQState类型的枚举 public enum QQState { OnLine, OffLine, Leave, Busy, QMe } class Program { static void Main(string[] args) { QQState state = QQState.OnLine; //枚举类型默认是可以和int类型互相转换的,即枚举类型和int类型是兼容的. int n = (int)state; Console.WriteLine(n); Console.WriteLine((int)QQState.OffLine); Console.WriteLine((int)QQState.Leave); Console.WriteLine((int)QQState.Busy); Console.WriteLine((int)QQState.QMe); Console.ReadKey(); } }}

通过以上代码我们可以知道枚举类型可以被强制,转换成int类型的.并且,由此我们可以知道,他们的默认下标是从0开始,我们还可以更改它的默认下标.来适应一些运行时的情况.
就像下列代码这样:
public enum QQState { OnLine=2, OffLine, Leave=5, Busy, QMe }

练习2: 将int类型强转成枚举类型.
如果:遇见转换不了的int类型(超出了枚举类型下标的范围),则输出,原来的int类型的数字.
namespace _05.枚举类型的练习02{ /// <summary> /// 声明一个QQState类型的枚举 /// </summary> public enum QQStare { OnLine, OffLine, Leave, Busy, QMe } class Program { static void Main(string[] args) { //将int 类型强转成枚举类型 int n1 = 3; QQStare state = (QQStare)n1; //将int类型的n1强转成QQState类型 Console.WriteLine(state); Console.ReadKey(); } }}

练习3: 枚举类型转换成string类型
注意: 在C#中所有的数据类型都可以转换成String类型.
namespace _06.枚举类型的练习03{ /// <summary> /// 声明一个QQState类型的枚举 /// </summary> public enum QQStare { OnLine, OffLine, Leave, Busy, QMe } class Program { static void Main(string[] args) { //在C#中所有的类型都可以转换成string类型. //比如: int n1 = 10; string s1 = n1.ToString(); //将整型转换成string类型 Console.WriteLine("int类型被转换成的string类型:{0}",s1); QQStare state = QQStare.OffLine; //我们也可将枚举类型转换成string类型 string s2 = state.ToString(); Console.WriteLine("QQState(枚举)类型,被转换出的string类型:{0}",s2); Console.ReadKey(); } }}

练习4: 将字符串转换成枚举类型
为什么没有Convert.ToEnum();呢?? 因为枚举类型的名字是我们自己命名的,所以不能使用
Convert.ToEnum();的方法来转换.
namespace _07.枚举的练习04{ /// <summary> /// 声明一个QQState类型的枚举 /// </summary> public enum QQStare { OnLine, OffLine, Leave, Busy, QMe } class Program { static void Main(string[] args) { string s = "0"; //将string类型转换成枚举类型 //调用Parse();方法的的目的就是为了让它将我们的一个字符串转换成相应的枚举类型. //我们怎么获得我们已经定义的枚举的类型呢? //我们使用typeof来实现 type:类型,of:谁的 Typeof:谁的类型 //typeof(QQState); 这一句话的意思就是获取QQState这个枚举的类型 //完整的写法 QQStare state = (QQStare)Enum.Parse(typeof(QQStare), s); Console.WriteLine(state); Console.ReadKey(); } }}

QQStare state = (QQStare)Enum.Parse(typeof(QQStare), s); //这一行是转换的重点,里面涉及反射等知识后面会学到。
当string类型转换后的值,再枚举中无法找到,就会抛出一个异常。
总结:
(1)我们可以将一个枚举类型的变量和int类型或者string类型互相转换。
(2)枚举类型默认是和int类型相互兼容的,所以可以通过强制转换的语法互相转换。
当转换一个枚举中没有的值时,不会抛出异常,而是直接将数字输出。
(3)任何类型都可以转换转换成string类型。
直接再要转换的值后面加入.Tostring就可以转换成string类型了。
(4)string类型也可以转换成枚举类型,转换时我们需要使用下面的语法式子。
(枚举类型) 枚举变量=(枚举类型)Enum.Parse(TypeOf(枚举类型),"需要转换的string类型");
当转换一个枚举中没有的值时,如果转换的是一个数字,枚举中即使没有也不会抛出异常,如果转换的不是数字,枚举中也没有,那么则会抛出一个异常.
















