zoukankan      html  css  js  c++  java
  • C#学习笔记(基础知识回顾)之枚举

    一:枚举的含义  

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

    二:枚举的优势

    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;
                }
            }
        }

    运行结果

    4.3再比如性别,前端可能用单项选择框来实现,当然可以在页面上把男、女选项列出来,并写死每个项的值,其缺点和上面类似,这种情况下也可以考虑用枚举来定义。

    5:关于使用一组有含义的值的其他解决方式

    比如城市重点项目类型:基础设施类项目,产业类项目,制造业项目,可能今年是这些第二年又会增加一些项目类型,如服务业项目。像这种一组值虽然也可以用枚举来做,但是第二年增加新项目类型的时候需要去调整代码,而这属于一开始就知道可能改变的,是正常增加,不应该去调整程序代码。像这种一组容易变化的值,一般使用数据字典表来存储,可以动态去配置这些代码项。

    数据字典表一般使用一张主表和一张子表,主表存储整个系统中所有的可配置项名称如:图书类别,重大项目类型。子表存储该类的值别具体的名称、值、排序、层级等等,而其他具体有用到这些代码值的表,和这两种表关联处理。总之对于不确定的一组有含义的值最好使用可配置的方式维护,不会轻易改变的一组有含义的值可以用枚举实现。

  • 相关阅读:
    前端与算法 leetcode 344. 反转字符串
    JavaScript闭包使用姿势指南
    前端与算法 leetcode 48. 旋转图像
    前端与算法 leetcode 36. 有效的数独
    前端与算法 leetcode 1. 两数之和
    前端与算法 leetcode 283. 移动零
    前端与编译原理 用js去运行js代码 js2run
    前端与算法 leetcode 66. 加一
    前端与算法 leetcode 350. 两个数组的交集 II
    前端与算法 leetcode 26. 删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/weity/p/6062290.html
Copyright © 2011-2022 走看看