zoukankan      html  css  js  c++  java
  • 从枚举值获取对应的文本描述

    有时枚举值在显示时,需要显示枚举值对应的文本串。一种方案是在调用的地方使用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.

  • 相关阅读:
    20155307《网络对抗》网络欺诈技术防范
    20155307《网络对抗》信息搜集与漏洞扫描
    20155307《网络对抗》MSF基础应用
    20155307《网络对抗》恶意代码分析
    20155307《网络对抗》免杀原理与实践
    预习非数值数据的编码方式
    预习原码补码
    C语言ll作业01
    C语言寒假大作战04
    C语言寒假大作战03
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604941.html
Copyright © 2011-2022 走看看