C#学习笔记(基础知识回顾)之枚举

时间:2022-05-05 03:32:18

标签:

一:枚举的含义  

枚举是用户定义的整数类型。在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值。还可以给值指定易于记忆的名称。个人理解就是为一组整数值赋予意义。

二:枚举的优势

2.1:枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。

2.2:枚举可以使代码清晰,用描述性的名称来表示整数值,增加代码可读性。

三:枚举的使用

     /// <summary> /// 声明一个枚举,审核状态 /// </summary> public enum AduitStatus { 草稿 = 0, 待审核 = 1, 审核通过 = 2, 审核退回 = 3 } public static void AuditResource(AduitStatus aduitStatus) { switch (aduitStatus) { case AduitStatus.审核通过: //审核通过的操作,比如修改数据库中该记录的状态等等 Console.WriteLine("审核通过!"); break; case AduitStatus.审核退回: //审核退回操作 Console.WriteLine("已退回!"); break; default: Console.WriteLine("hello"); break; } }

四:在实际项目中什么时候使用枚举?

4.1个人理解枚举是用来存储一组不会轻易改变的值,比如性别:未知、男、女。审核状态:草稿、审核通过、审核退回等。

4.2拿审核状态来说,数据库中一般存储各个状态的值。而界面显示的时候需要展示状态的名称,比如用0表示草稿、1表示审核通过、2表示审核退回。如果不用枚举当然也可以实现比如:

public static void AuditResource(int aduitStatus) { switch (aduitStatus) { case 1: //审核通过的操作,比如修改数据库中该记录的状态等等 Console.WriteLine("审核通过!"); break; case 2: //审核退回操作 Console.WriteLine("已退回!"); break; default: Console.WriteLine("hello"); break; } }

而显示的时候根据取到的值,再用代码值替换成描述性名称。

foreach (Article article in list) { string ArticleStatus = ""; if (article.Status == 0) { ArticleStatus = "草稿"; } else if (article.Status == 1) { ArticleStatus = "审核通过"; } else if (article.Status == 2) { ArticleStatus = "审核退回"; }
       //……
}

上面这种硬编码就明显存在着很多缺点,如其他人单独看上面一段代码,可能不明白每个数字的含义,就算是自己时间久了之后也未必能够记住每个值的含义,再阅读到这边代码的时候就难以理解,而且显示的名称没有个标准,不同的人描述不同状态有自己的叫法。

像上面这种用到Switch的情况,很多时候都可以用枚举实现。比如下面的代码,swicth语句中的值用枚举实现,而显示一个类中的状态名称时候根据这个值转换为枚举里面的名称。这样代码更容易理解,显示也会统一。

class Program { /// <summary> /// 声明一个枚举,审核状态 /// </summary> public enum AduitStatus { 草稿 = 0, 审核通过 = 1, 审核退回 = 2 } public class Artice { public string Title { get; set; } public int status { get; set; } } static void Main(string[] args) { Console.WriteLine("该资源审核是否通过?(Y/N)"); string isPass = Convert.ToString(Console.ReadLine()); if (isPass.ToUpper() == "Y") { AuditResource(AduitStatus.审核通过); } else { AuditResource(AduitStatus.审核退回); } Artice Ar = new Artice() { Title = "C#学习笔记", status = 0 }; Console.WriteLine("标题:{0},状态:{1}", Ar.Title, (AduitStatus)(Ar.status));//输出“标题:C#学习笔记,状态:草稿” Console.ReadKey(); } public static void AuditResource(AduitStatus aduitStatus) { switch (aduitStatus) { case AduitStatus.审核通过: //审核通过的操作,比如修改数据库中该记录的状态等 Console.WriteLine(AduitStatus.审核通过); break; case AduitStatus.审核退回: //审核退回操作 Console.WriteLine(AduitStatus.审核退回); break; default: Console.WriteLine("hello"); break; } } }

运行结果