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());   //高中;
}
posted @   C余L小R鱼  阅读(583)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示