浅谈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 }            
View Code

对于,str变量,你可以输入0/1,或者Male/Female,如果输入的变量不是前边几种的话,默认程序就会报错,上边这程序是调用了动态链接库里的MessageBox函数来显示

一个错误消息。

 至此,枚举类型介绍完毕。因为在下才疏学浅,如有误导之处,还望海涵指出,以便你我增进知识。

转载请首行声明:

博客园:http://www.cnblogs.com/gu-zhan/    老咸出品

posted @ 2014-11-04 02:41  Mertin.Chen  阅读(2284)  评论(0编辑  收藏  举报