C# 从枚举值获取对应的文本描述详解

C# 从枚举值获取对应的文本描述详解

有时枚举值在显示时,需要显示枚举值对应的文本串。一种方案是在调用的地方使用switch或者if来判断枚举值,然后赋给不同的文本串,但这样一来,如果有较多的地方都用到的时候就会比较麻烦。当然有人说,这种情况下,可以针对这种枚举值封装一个方法,然后来调用。那如果有多个枚举类型都有这样的需求呢?有没有什么比较通用的解决办法?有的。

这里需要用到Description属性,给每个枚举值都赋上一个该属性,然后在该属性中赋上要描述的文本串。比如

#region YesNoEnum
 public enum YesNoEnum
 {
   [Description("是")]
   Yes,
   [Description("否")]
   No
 }
 #endregion 

注:Desscription需要引用using System.ComponentModel;

那要如何获取这个Description属性的值呢?我们可以作用反射,代码如下

public static class EnumUtil
 {
   #region FetchDescription
   /// <summary>
   /// 获取枚举值的描述文本
   /// </summary>
   /// <param name="value"></param>
   /// <returns></returns>
   public static string FetchDescription(this Enum value)
   {
     FieldInfo fi = value.GetType().GetField(value.ToString());
     DescriptionAttribute[] attributes =
        (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute), false);
     return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
   }
   #endregion
 }

注:我们这里写的虽然是静态方法,但是可以适用于所有的Enum类。EnumUtil必须是静态类,而方法也必须是静态方法,同时第一个参数必须是this的,这样才能将方法扩展到Enum类中,以适用到所有的枚举中。

下面是调用代码

YesNoEnum yesNoEnum = YesNoEnum.Yes;
 string description = yesNoEnum.FetchDescription();
 Console.WriteLine(description);

调用的截图如下

从图中可以看到description得到了我们在枚举中指定的Description的文本。同时YesNoEnum的枚举实例增加了扩展方法FetchDescription.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • c#枚举值增加特性说明(推荐)

    通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示. 自定义打印特性 [AttributeUsage(AttributeTargets.Field)] public class EnumDisplayAttribute : Attribute { public EnumDisplayAttribute(string displayStr) { Display = displayStr; } public string Display { get; private set; } } 打

  • C#枚举数值与名称的转换实例分享

    首先建立一个枚举: 复制代码 代码如下: /// <summary>    /// 颜色    /// </summary>    public enum ColorType    {        /// <summary>        /// 红色         /// </summary>        Red, /// <summary>        /// 蓝色         /// </summary>      

  • C# 获取枚举值的简单实例

    先申明一个枚举: 复制代码 代码如下: public enum Test_Enum        {            one = 1001, two = 1002, three = 1003, four = 1004, five = 1005, six = 1006, seven = 1007, eight = 1008, nine = 1009, zero = 1000        } 获取值: 复制代码 代码如下: object ojb = Enum.GetName(typeof(T

  • C# 从枚举值获取对应的文本描述详解

    C# 从枚举值获取对应的文本描述详解 有时枚举值在显示时,需要显示枚举值对应的文本串.一种方案是在调用的地方使用switch或者if来判断枚举值,然后赋给不同的文本串,但这样一来,如果有较多的地方都用到的时候就会比较麻烦.当然有人说,这种情况下,可以针对这种枚举值封装一个方法,然后来调用.那如果有多个枚举类型都有这样的需求呢?有没有什么比较通用的解决办法?有的. 这里需要用到Description属性,给每个枚举值都赋上一个该属性,然后在该属性中赋上要描述的文本串.比如 #region YesN

  • Java枚举学习之定义和基本特性详解

    目录 枚举的定义 1.题目 2.解题思路 3.代码详解 枚举的基本特性 1.题目 2.解题思路 3.代码详解 4.多写一个知识点 增加枚举元素信息 1.题目 2.解题思路 3.代码详解 枚举的定义 1.题目 枚举是JAVA 5.0后增加的一个重要类型.可以用来表示一组取值范围固定的变量.使用enum关键字,可以定义枚举类型. 实现:使用反射查看枚举的修饰符,父类和自定义方法. 2.解题思路 创建一个枚举:Position 定义两个元素,来表示方位. 对于枚举的元素命名方式:全部为大写字母. 创建

  • 微信小程序 获取二维码实例详解

     微信小程序 获取二维码实例详解 理论: 接口A: 适用于需要的码数量较少的业务场景 接口地址:(永久有效,数量有限,进入path对应的页面) https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN path String 不能为空,最大长度 128 字节 width Int 430(默认) 二维码的宽度 auto_color .. line_color .. 接口B:适用于需要的码数量极多,或仅临时使用的业务场景(永

  • Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象进行处理就是对word文档的内容处理. 二,相关概念 如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念. 1,Docume

  • 对Python中DataFrame选择某列值为XX的行实例详解

    如下所示: #-*-coding:utf8-*- import pandas as pd all_data=pd.read_csv("E:/协和问答系统/SenLiu/熵测试数据.csv") #获取某一列值为xx的行的候选列数据 print(all_data) feature_data=all_data.iloc[:,[0,-1]][all_data[all_data.T.index[0]]=='青年'] print(feature_data) 实验结果如下: "C:\Pro

  • Layui数据表格判断编辑输入的值,是否为我需要的类型详解

    因为很多使用layui插件做的表格都需要用到layui的表格编辑事件,但是编辑事件是可以随意输入值的,但是如果当我们的字段为数量的时候,又需要获取到数量传进控制器进行数据处理的时候,而控制器接收的数量为int类型.倘若我输入的数量不是整数类型,那么就无法传进控制器,直接报404,找不到url中的方法 所有在使用重载前,最好先对用户输入的值进行一下判断,判断是否符合条件,允许传进控制器 比如我项目中的表格 我这个项目要求是,当用户输入的数量大于该商品在该仓库的库存时,就会提醒用户,并且将数量的值,

  • 两种获取connectionString的方式案例详解

     两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; <connectionStrings> <add name="ConnectionString" connectionString="Data Sour

  • Vue nextTick延迟回调获取更新后DOM机制详解

    目录 简述 事件循环机制 vue数据驱动视图的处理(异步变化DOM) Vue.nextTick原理 Vue.nextTick的应用 created生命周期中操作DOM 修改数据,获取DOM值 简述 相信大家在写vue项目的时候,一定会发现一个神奇的api,Vue.nextTick.为什么说它神奇呢,那是因为在你做某些操作不生效时,将操作写在Vue.nextTick内,就神奇的生效了.那这是什么原因呢? 让我们一起来研究一下. vue 实现响应式并不是数据发生变化后 DOM 立即变化,而是按照一定

  • IOS 获取APP 版本号的实例详解

    IOS 获取APP 版本号的实例详解 看代码的时候看到一句,用于获取.plist文件的版本号 labelVersion.text = [NSString stringWithFormat:@"v%@", [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleVersionKey]]; 比较感兴趣的是后面的参数 kcFBundleVersionKey ,竟然是CFBundle.h已经定于好的属性,下面有

  • JSP 获取本地图片的实例详解

    JSP 获取本地图片的实例详解 IE当前7以上版本不支持直接在src上写本地硬盘地址来显示图片.因为我们只有通过后台在response中读到二进制流的方式来在前台显示图片. 具体代码如下: public void showPicture(){ String id = ServletActionContext.getRequest().getParameter("id");//前台传来的存图片路径实体类的主键id HttpServletResponse response = Servle

随机推荐