前言
相信很多人对枚举并不陌生,枚举可以很方便和直观的管理一组特定值。如果我们在页面上直接输出我们希望匹配的汉语意思或则其他满足我们需求的语句就更好了,当然,通常小伙伴们都会再页面上if(enum==1) “我是一个枚举”或者switch(enum)这种方式解决。
那今天我们就来介绍一种更优雅的解决方法
开整
先定义一个枚举类
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());//获取枚举特性值
调试过程
- 感谢你的阅读。如果你觉得这篇文章对你有帮助或者有启发,就请推荐一下吧~你的精神支持是博主强大的写作动力。欢迎转载!
- 博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高(其实是个菜B),不足和错误之处在所难免,希望大家能够批评指出。
- 欢迎加入.NET 从入门到精通技术讨论群→523490820 期待你的加入
- 不舍得打乱,就永远学不会复原。被人嘲笑的梦想,才更有实现的价值。
- 我的博客:http://www.cnblogs.com/zhangxiaoyong/