• 获取指定类型如枚举/属性上自定义attribue值


    有时候我们用数字来区分一些类型,如1:中国银行,2:建设银行,3:工商银行,……。
    这时候我在代码中通常会定义枚举来与定义的一一对应,并在该枚举值上设置特性来表示所代表的含义,这样避免多处写一些数字来标识所代表的类型。而且后续添加修改也很方便。


    首先,自定义一个特性描述类:
     1     public class DescriptionAttribute : Attribute
     2     {
     3         public static readonly DescriptionAttribute Default;
     4 
     5         public DescriptionAttribute();
     6         public DescriptionAttribute(string description);
     7 
     8         public virtual string Description { get; }
     9         protected string DescriptionValue { get; set; }
    10 
    11         public override bool Equals(object obj);
    12         public override int GetHashCode();
    13     }

    定义枚举:
    1 public enum EnumType
    2 3   [Description("第一")]
    4   FIRST,
    5   [Description("第二")]
    6   SECOND,
    7   [Description("第三")]
    8   THIRD,
    9

    将枚举特性值转为注释信息:
     1         /// <summary>
     2         /// 将枚举特性值转为注释信息
     3         /// </summary>
     4         /// <param name="enumType"></param>
     5         /// <returns></returns>
     6         public static string ToString<T>(this T enumType)
     7         {
     8             Type type = enumType.GetType();
     9             FieldInfo fd = type.GetField(enumType.ToString());
    10             if (fd == null)
    11                 return string.Empty;
    12             var attributes = fd.GetCustomAttributes(typeof(DescriptionAttribute), false);
    13 
    14             var txt = string.Empty;
    15             foreach (DescriptionAttribute attr in attributes)
    16             {
    17                 txt = attr.Description;
    18                 break;
    19             }
    20             return txt;
    21         }

    调用:

    1 var name = EnumType.FIRST.ToString<EnumType>();
    2 //第一

  • 相关阅读:
    Delphi WinAPI GetWindowRect
    Delphi WMI[2] 响应网线断开
    打印两个升序链表中共同的数据
    判断一个链表是否是回文结构
    删除有序数组中的重复项
    三数之和、最接近目标值的三数之和
    删除链表倒数第N个节点
    判断回文数
    字符串转整数
    整数反转
  • 原文地址:https://www.cnblogs.com/shouwu/p/6710633.html
Copyright © 2020-2023  润新知