浅谈C#枚举类型
枚举(Enum),一个毫不起眼的小喽啰。
CSDN的描述如下:
enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。 通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。 但是,还可以将枚举嵌套在类或结构中。 默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。
其实这个已经够详细了。相信枚举大家都不陌生,只是这玩意不常用。
那么枚举有什么用呢?假设,你现在跟你的团队小组(3人)正在开发一个学生成绩管理系统。各自负责一个小模块。
你对于性别sex是这样定义的:
char s1 = 'M';//男生
char s1 = 'F';//女生
你的基友_one是这样描述的:
string str1 = "Male";//男生 string str2 = "Female";//女生
而你的基友_two是这样实现的:
string str1 = "男生"; string str2 = "女生";
嗯,大家发现问题没有?每个人对“性别”的描述都不一样,这就导致后期代码拼凑时,不可避免地出错。这又跟Enum有什么关系呢?
当然有,关系还挺大的,因为你可以如下定义:
public enum sex { Male, Female }
将性别定义为一个枚举类型,这样访问时,调用sex.Male/sex.Female,可以让我们很直观地知道,这一行代码是在调用到性别,这个东西。
那么如何用呢?如下:
sex s1 = sex.Male;//or sex s2 = sex.Female;
具体的呢,可以将声明枚举类型写在Main()方法之外,namespace之内,这样会更合理。因为这样所有用户自定义的类,都可以调用到声明的枚举类型。
下面来介绍,枚举这东西与int ,string 这些类型的转换。
首先我们要知道一件事,C#里所有的类型都可以转换为string类型。如何转换,So easy~ ,直接调用 sex.Male.ToString();即可。
另外,我们要知道,C#中转换类型首先我们要判断类型间是否兼容,如果遇到int与double,decimal,long,short等的转换,只需要注意精度就可以。
如果是string转为int,则可能要用到以下三种方法:
1.使用Convert.ToInt32(); int i = Convert.ToInt32(str);//str代表某个字符串 2.使用int.Parse(); int i = int.Parse(str);//str代表某个字符串 3.使用int.TryParse(); int i = int.TryParse(str);//str代表某个字符串
所以,Enum类型转为string或int类型,代码如下,so easy too~
public Enum sex { Male, Female } int i = (int)sex.Male; Console.WriteLine(i); string str = sex.Male.ToString();
但是,当遇到,string类型转为enum时,你就苦恼了,string str = "1"; sex.Male = str;? No,No,No,正确写法应该是:
string str = "1"; sex.Male = (sex)Enum.Parse(typeof(sex),str);
乍一看好像挺高端的样子,我们慢慢看来,
首先,typeof干嘛用的?简单来说就是获取当前枚举的类型。为什么要这样做呢?假设你现在有好多好多个枚举类型,什么 sex,weekend,1234...当你要对其中某一种类型
转换为string类型时,编译器是不知道你要对哪一个类型进行转换的。因此要用typeof()来获取当前要转换的枚举类型。
至于第二个参数,str只是我们所要转换的那个string变量。
所以,程序可以这样写:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.InteropServices; 5 using System.Text; 6 using System.Threading.Tasks; 7 namespace project 8 { 9 public enum sex 10 { 11 Male, 12 Female 13 } 14 public static void Main() 15 { 16 [DllImport("User32.dll")] 17 public static extern int MessageBox( 18 int h, 19 string m, 20 string c, 21 int type 22 ) 23 24 25 try 26 { 27 string str = Console.ReadLine(); 28 sex s = (sex)Enum.Parse(typeof(sex),str); 29 Console.WriteLine(s); 30 } 31 catch 32 { 33 MessageBox(0,"What you input is wrong ","Catch",3); 34 } 35 } 36 }
对于,str变量,你可以输入0/1,或者Male/Female,如果输入的变量不是前边几种的话,默认程序就会报错,上边这程序是调用了动态链接库里的MessageBox函数来显示
一个错误消息。
至此,枚举类型介绍完毕。因为在下才疏学浅,如有误导之处,还望海涵指出,以便你我增进知识。
转载请首行声明:
博客园:http://www.cnblogs.com/gu-zhan/ 老咸出品