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.

  • 相关阅读:
    添加远程库
    Git远程仓库
    Git 删除文件
    Git撤销暂存区stage中的内容
    Git 暂存区的概念
    Git add和commit步骤分析
    2017CCPC秦皇岛 E题String of CCPC&&ZOJ3985【模拟】
    2017CCPC秦皇岛 C题Crusaders Quest&&ZOJ3983【模拟+STL】
    2017CCPC秦皇岛 L题One-Dimensional Maze&&ZOJ3992【模拟】
    HDU2444 The Accomodation of Students【匈牙利算法】
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604941.html
Copyright © 2011-2022 走看看