• 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:关于使用一组有含义的值的其他解决方式

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

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

  • 相关阅读:
    Python自动化开发-基础语法
    Python自动化开发-简介
    Hello World!
    Mongo导出数据文件导致错误 Got signal: 6 (Aborted)解决方法
    PHP快速排序及其时间复杂度
    PHP读某一个目录下所有文件和文件夹
    PHP获得两个绝对路径的相对路径
    awk神器
    PHP使用Mysql事务
    PHP使用session_set_save_handler陷阱
  • 原文地址:https://www.cnblogs.com/weity/p/6062290.html
Copyright © 2020-2023  润新知