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());   //高中;
}
原文地址:https://www.cnblogs.com/Alicia-meng/p/15529500.html