一:枚举的含义  

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

二:枚举的优势

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

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

三:枚举的使用

      /// <summary>
/// 声明一个枚举,审核状态
/// </summary>
public enum AduitStatus
{
草稿 = ,
待审核 = ,
审核通过 = ,
审核退回 =
} 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 :
//审核通过的操作,比如修改数据库中该记录的状态等等
Console.WriteLine("审核通过!");
break;
case :
//审核退回操作
Console.WriteLine("已退回!");
break;
default:
Console.WriteLine("hello");
break;
}
}

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

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

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

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

class Program
{
/// <summary>
/// 声明一个枚举,审核状态
/// </summary>
public enum AduitStatus
{
草稿 = ,
审核通过 = ,
审核退回 =
}
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 = };
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:关于使用一组有含义的值的其他解决方式

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

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

C#学习笔记(基础知识回顾)之枚举的更多相关文章

  1. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  2. three.js学习笔记--基础知识

    基础知识 从去年开始就在计划中的three.js终于开始了 历史介绍 (摘自ijunfan1994的转载,感谢作者) OpenGL大概许多人都有所耳闻,它是最常用的跨平台图形库. WebGL是基于Op ...

  3. SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

    Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   ...

  4. Java Script 学习笔记 -- 基础知识

    Java script 概述 java Script 的简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为 ...

  5. java虚拟机JVM学习笔记-基础知识

    最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--java虚拟机 媒介:JVM是每一位从事Java开发工程师必须翻越的一座大山! JVM(Java Virtual Machine)JRE ...

  6. hadoop学习笔记——基础知识及安装

    1.核心 HDFS  分布式文件系统    主从结构,一个namenoe和多个datanode, 分别对应独立的物理机器 1) NameNode是主服务器,管理文件系统的命名空间和客户端对文件的访问操 ...

  7. php学习笔记——基础知识(2)

    9.PHP语句 if 语句 - 如果指定条件为真,则执行代码 if...else 语句 - 如果条件为 true,则执行代码:如果条件为 false,则执行另一端代码 if...else if.... ...

  8. php学习笔记——基础知识(1)

    1.PHP 脚本在服务器上执行,然后向浏览器发送回纯 HTML 结果. 2.基础 PHP 语法 1)PHP 脚本可放置于文档中的任何位置. 2)PHP 脚本以 <?php 开头,以 ?> ...

  9. Redux学习笔记-基础知识

      Redux概述 是什么:Redux是管理状态的容器,提供可预测的状态管理. 怎么做:Redux主要是用来管理组件或者应用的状态,本质上跟一个事件处理器差不多.通过分发action触发reduce来 ...

  10. GO Lang学习笔记 - 基础知识

    Go lang Learn Note 标签(空格分隔): Go Go安装和Go目录 设置环境变量GOROOT和GOPATH,前者是go的安装目录,后者是开发工作目录.go get包只会将包下载到第一个 ...

随机推荐

  1. 【JVM】jvm启动参数

    -server -Xmx2048m -Xms1500m -Xmn1024m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConc ...

  2. 官宣,PyTorch 1.0 稳定版本现已推出

    简评:快来一起快乐地学习吧. 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版.研究 ...

  3. Google 推出新搜索引擎以查找数据集

    简评:谷歌推出了一个用于寻找数据集的新搜索引擎,有点厉害! ​​​​该工具可以更轻松地访问 Web 上数千个数据存储库中的数百万个数据集,当前还处于测试版: 什么是 Dataset Search? 数 ...

  4. day 02 ---class - homework

    # -*- coding: utf-8 -*-# @Time : 2018/12/20 14:34# @Author : Endless-cloud# @Site : # @File : day 02 ...

  5. 通过API方式查看Azure Sign-ins记录

    经确认,目前Sign-ins功能在中国区还没有开通.也没有相关的预计开通时间.您可以通过如下链接随时关注China Azure的最新公告:https://www.azure.cn/zh-cn/what ...

  6. ReactNative 打包 APK

    ReactNative打包步骤: 1.在项目的根目录执行下面这行命令: keytool -genkey -v -keystore my-release-key.keystore -alias my-k ...

  7. Log中关于zVideoApp与zChatApp之间的消息传递可以搜索以下字符串

    [CSSBConfIPCAgent::OnMessageReceived]  (这是zVideoApp端的) 和 [CSSBPTIPCListener::OnMessageReceived]      ...

  8. [LibreOJ #2983]【WC2019】数树【计数】【DP】【多项式】

    Description 此题含有三个子问题 问题1: 给出n个点的两棵树,记m为只保留同时在两棵树中的边时连通块的个数,求\(y^m\) 问题2: 给出n个点的一棵树,另外一棵树任意生成,求所有方案总 ...

  9. TortoiseGit学习系列之TortoiseGit基本操作将提交到本地的项目推送到在线仓库(图文详解)

    前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseG ...

  10. Oracle练习笔记

    1 基本查询 SQL> --当前用户 SQL> show user USER 为 "SCOTT" SQL> --当前用户下的表 SQL> select * ...