C#获取Description特性的扩展类

C#中Description特性主要用于枚举和属性,方法比较简单,记录一下以便后期使用。
扩展类DescriptionExtension代码如下:

using System;
using System.ComponentModel;
using System.Reflection;
 
/// <summary>
/// 描述特性的读取扩展类
/// </summary>
public static class DescriptionExtension
{
    /// <summary>
    /// 获取枚举的描述信息
    /// </summary>
    public static string GetDescription(this Enum em)
    {
        Type type = em.GetType();
        FieldInfo fd = type.GetField(em.ToString());
        string des = fd.GetDescription();
        return des;
    }



    /// <summary>
    /// 获取属性的描述信息
    /// </summary>
    public static string GetDescription(this Type type, string proName)
    {
        PropertyInfo pro = type.GetProperty(proName);
        string des = proName;
        if (pro != null)
        {
            des = pro.GetDescription();
        }
        return des;
    }



    /// <summary>
    /// 获取属性的描述信息
    /// </summary>
    public static string GetDescription(this MemberInfo info)
    {
        var attrs = (DescriptionAttribute[])info.GetCustomAttributes(typeof(DescriptionAttribute), false);
        string des = info.Name;
        foreach (DescriptionAttribute attr in attrs)
        {
            des = attr.Description;
        }
        return des;
    }
}

使用方法:

[Description("测试枚举名")]
enum TestEnum 
{
    [Description("测试")]
    Test1 
}

[Description("测试类名")]
class TestClass
{
    [Description("测试class")]
    public int Test1 { get; set; }
}

//获取枚举类型的描述特性
string str1 = typeof(TestEnum).GetDescription();

//获取枚举值的描述特性
string str2 =TestEnum.Test1.GetDescription();
str2 = typeof(TestEnum).GetDescription(nameof(TestEnum.Test1));
str2 = typeof(TestEnum).GetDescription(TestEnum.Test1.ToString());

//获取类的描述特性
string str3 = typeof(TestClass).GetDescription();

//获取属性的描述特性(也可以反射遍历属性列表)
string str4 = typeof(TestClass).GetDescription();
TestClass test = new TestClass();
str4 = typeof(TestClass).GetDescription(nameof(test.Test1));
posted @   二次元攻城狮  阅读(806)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
  1. 1 烟花易冷 小柔Channel
  2. 2 红颜如霜 江壹纯
  3. 3 不谓侠 小桃Channel
  4. 4 小小恋歌 新坦结衣
  5. 5 神预言 袁娅维TIARAY
烟花易冷 - 小柔Channel
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示
主题色彩