软件编程
位置:首页>> 软件编程>> C#编程>> C#获取Description特性的扩展类详解

C#获取Description特性的扩展类详解

作者:time-flies  发布时间:2022-06-04 13:27:24 

标签: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
}

来源:https://www.cnblogs.com/timefiles/p/16395131.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com