• C# 获取自定义特性值


    自定义一个特性

    /// <summary>
    /// 枚举备注特性
    /// </summary>
    public class EnumRemarkAttribute : Attribute
    {
       public string Remark { get; set; }
       public EnumRemarkAttribute(string remark)
       {
           this.Remark = remark;
       }
    }
    

    特性对应枚举使用

    
    /// <summary>
    /// 用户学历
    /// </summary>
    public enum UserEducation
    {
      /// <summary>
      /// 小学
      /// </summary>
      [EnumRemark("小学")]
      PrimarySchool = 1,
      /// <summary>
      /// 高中
      /// </summary>
      [EnumRemark("高中")]
      HighSchool = 2,
      /// <summary>
      /// 大学
      /// </summary>
      [EnumRemark("大学")]
      University = 3
    }
    

    新增一个枚举扩展方法

    public static class EnumRemark
    {
        public static string GetRemark(this Enum enumInfo)
        {
            Type type = enumInfo.GetType();
            //获取字段信息
            FieldInfo field = type.GetField(enumInfo.ToString());
            //检查字段是否含有指定特性
            if (field.IsDefined(typeof(EnumRemarkAttribute), true))
            {
                //获取字段上的自定义特性
                EnumRemarkAttribute remarkAttribute = (EnumRemarkAttribute)field.GetCustomAttribute(typeof(EnumRemarkAttribute));
                return remarkAttribute.Remark;
            }
            else
            {
                return enumInfo.ToString();
            }
        }
    }
    

    使用Demo

    static void Main(string[] args)
    {
        UserEducation userEducation = UserEducation.HighSchool;
        Console.WriteLine((int)userEducation);          //2
        Console.WriteLine(userEducation.ToString());    //HighSchool
        Console.WriteLine(userEducation.GetRemark());   //高中;
    }
    
  • 相关阅读:
    适配器模式
    控制器的显示注入
    自定义过滤器
    配置路由
    JavaScript判断浏览器类型及版本(新增IE11)
    路径别名
    判断是否是IE浏览器和是否是IE11
    页面视图中的按钮操作指向
    安卓开发环境搭建与环境变量设置
    html中iframe子页面与父页面元素的访问以及js变量的访问
  • 原文地址:https://www.cnblogs.com/Alicia-meng/p/15529500.html
Copyright © 2020-2023  润新知