这篇文章主要和大家详细介绍一下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));补充:
C#利用扩展方法获得枚举的Description
/// <summary>
/// 扩展方法,获得枚举的Description
/// </summary>
/// <param name="value">枚举值</param>
/// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
/// <returns>枚举的Description</returns>
public static string GetDescription(this Enum value, Boolean nameInstead = true)
{
    Type type = value.GetType();
    string name = Enum.GetName(type, value);
    if (name == null)
    {
        return null;
    }
  
    FieldInfo field = type.GetField(name);
    DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
  
    if (attribute == null && nameInstead == true)
    {
        return name;
    }
    return attribute?.Description;
}随便整一个枚举
public enum ModuleType
 {
     /// <summary>
     /// 中国
     /// </summary>
     [Description("中国")]
     ZH = 1,
     /// <summary>
     /// 美国
     /// </summary>
     [Description("美国")]
     MG = 2
 }到此这篇关于C#获取Description特性的扩展类详解的文章就介绍到这了,更多相关C#获取Description特性内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!
				 沃梦达教程
				
			本文标题为:C#获取Description特性的扩展类详解
				
        
 
            
        
             猜你喜欢
        
	     - Unity3D实现渐变颜色效果 2023-01-16
 - WPF使用DrawingContext实现绘制刻度条 2023-07-04
 - C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
 - c# 模拟线性回归的示例 2023-03-14
 - Unity Shader实现模糊效果 2023-04-27
 - user32.dll 函数说明小结 2022-12-26
 - .NET CORE DI 依赖注入 2023-09-27
 - Oracle中for循环的使用方法 2023-07-04
 - 在C# 8中如何使用默认接口方法详解 2023-03-29
 - 如何使用C# 捕获进程输出 2023-03-10
 
						
						
						
						
						
				
				
				
				