C#如何给枚举类型增加一个描述特性详解
前言
相信很多人对枚举并不陌生,枚举可以很方便和直观的管理一组特定值。如果我们在页面上直接输出我们希望匹配的汉语意思或则其他满足我们需求的语句就更好了,当然,通常小伙伴们都会再页面上if(enum==1) “我是一个枚举”或者switch(enum)这种方式解决。
枚举的优点:
<1>枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。
<2>枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。
<3>枚举使代码更易于键入。在给枚举类型的实例赋值时,VS.NET IDE会通过IntelliSense弹出一个包含可接受值的列表框,减少了按键次数,并能够让我们回忆起可能的值
那今天我们就来介绍一种更优雅的解决方法
开整
先定义一个枚举类
enum StatusEnum { [Description("修改")] Update = 1, [Description("新增")] Insert = 2, [Description("删除")] Delete = 3 }
Description是属性特性的意思。记住即可
大家要记住,所有的特性类必须继承自 Attribute,所以,我们自定义一个特性类
/// <summary> /// 备注特性 /// </summary> public class RemarkAttribute : Attribute { /// <summary> /// 备注 /// </summary> public string Remark { get; set; } public RemarkAttribute(string remark) { this.Remark = remark; } }
有了这个特性类之后呢,我们还需要一个枚举扩展类
/// <summary> /// 枚举扩展类 /// </summary> public static class EnumExtension { /// <summary> /// 获取枚举的备注信息 /// </summary> /// <param name="em"></param> /// <returns></returns> public static string GetRemark(this Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); if (fi == null) { return value.ToString(); } object[] attributes = fi.GetCustomAttributes(typeof(RemarkAttribute), false); if (attributes.Length > 0) { return ((RemarkAttribute)attributes[0]).Remark; } else { return value.ToString(); } } public static string GetEnumDescription(this Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); if (attributes.Length > 0) { return attributes[0].Description; } else { return value.ToString(); } } }
需要引入命名空间:
using System.Collections.Generic; using System.ComponentModel;
有了这个枚举扩展类,我们就可以直接使用了
Console.WriteLine((int)StatusEnum.Insert);//输出原有枚举值 Console.WriteLine(StatusEnum.Insert.GetRemark());//获取枚举备注信息 Console.WriteLine(StatusEnum.Insert.GetEnumDescription());//获取枚举特性值
调试过程
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
栏 目:C#教程
下一篇:C#实现餐饮管理系统完整版
本文标题:C#如何给枚举类型增加一个描述特性详解
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/4924.html
您可能感兴趣的文章
- 01-10Extjs4如何处理后台json数据中日期和时间
- 01-10asp.net中XML如何做增删改查操作
- 01-10C#获取动态生成的CheckBox值
- 01-10C#.NET中如何批量插入大量数据到数据库中
- 01-10C#连接数据库的方法
- 01-10C#给图片添加水印完整实例
- 01-10解析C#中的常量及如何在C#编程中定义常量
- 01-10C#编程中枚举类型的使用教程
- 01-10C#实现给图片加水印的方法
- 01-10C#怎么给PDF添加背景图片
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax实现页面的局部加载
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10SublimeText编译C开发环境设置
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10使用C语言求解扑克牌的顺子及n个骰子