IT知识库 购物 网址 游戏 小说 歌词 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> .NET新手区 -> C#学习笔记(基础知识回顾)之枚举 -> 正文阅读

[.NET新手区]C#学习笔记(基础知识回顾)之枚举

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:关于使用一组有含义的值的其他解决方式
比如城市重点项目类型:基础设施类项目,产业类项目,制造业项目,可能今年是这些第二年又会增加一些项目类型,如服务业项目。像这种一组值虽然也可以用枚举来做,但是第二年增加新项目类型的时候需要去调整代码,而这属于一开始就知道可能改变的,是正常增加,不应该去调整程序代码。像这种一组容易变化的值,一般使用数据字典表来存储,可以动态去配置这些代码项。
数据字典表一般使用一张主表和一张子表,主表存储整个系统中所有的可配置项名称如:图书类别,重大项目类型。子表存储该类的值别具体的名称、值、排序、层级等等,而其他具体有用到这些代码值的表,和这两种表关联处理。总之对于不确定的一组有含义的值最好使用可配置的方式维护,不会轻易改变的一组有含义的值可以用枚举实现。
上一篇文章      下一篇文章      查看所有文章
加:2016-11-14 22:23:22  更:2017-05-14 06:23:40 
 
  .NET新手区 最新文章
将ZIP文件添加到程序集资源文件然后在运行时
Web服务的调用
.NET创建WebService服务简单的例子
多线程编程学习笔记——任务并行库(三)
序列化和反序列化
Spring学习之路
ASP.NET刷新页面的六种方法
[C#] 获取计算机内部信息
uploadify插件Http Error(302)错误记录(
webform(十)——图片水印和图片验证码
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年10日历
2018-10-23 16:24:26
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库