获取变量Description描述
代码运行效果如下:

using System;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using static ConsoleApp1.Program;
namespace ConsoleApp1
{
internal class Program
{
public enum EnumTest
{
[Description("enum数据1")]
enumdata1 = 0,
[Description("enum数据2")]
enumdata2 = 1,
}
public class DataTest
{
[Description("data数据1")]
public string data1 { get; set; }
[Description("data数据2")]
public string data2 { get; set; }
}
static void Main(string[] args)
{
Console.WriteLine("data1".GetClassText<DataTest>());
Console.WriteLine("data2".GetClassText<DataTest>());
Console.WriteLine(EnumTest.enumdata1.GetEnumDesc());
Console.WriteLine(EnumTest.enumdata2.GetEnumDesc());
Console.WriteLine(EnumTest.enumdata1.GetEnumCategory());
Console.WriteLine(EnumTest.enumdata2.GetEnumCategory());
Console.Read();
}
}
public static class GetName
{
/// <summary>
/// 获取枚举Description描述
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumValue"></param>
/// <returns></returns>
public static string GetEnumDesc<T>(this T enumValue) where T : Enum
{
if (enumValue == null) return null;
var memberInfo = enumValue.GetType().GetMember(enumValue.ToString()).FirstOrDefault();
if (memberInfo == null)
return null;
var attributeOfType = memberInfo.GetCustomAttributes<DescriptionAttribute>(false).FirstOrDefault();
if (attributeOfType != null)
{
return attributeOfType.Description;
}
return enumValue.ToString();
}
/// <summary>
/// 获取枚举元素名字
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumValue"></param>
/// <returns></returns>
public static string GetEnumCategory<T>(this T enumValue) where T : Enum
{
if (enumValue == null) return null;
var memberInfo = enumValue.GetType().GetMember(enumValue.ToString()).FirstOrDefault();
if (memberInfo == null)
return null;
var attributeOfType = memberInfo.GetCustomAttributes<CategoryAttribute>(false).FirstOrDefault();
if (attributeOfType != null)
{
return attributeOfType.Category;
}
return enumValue.ToString();
}
/// <summary>
/// 获取类中变量Description描述
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="Value"></param>
/// <returns></returns>
public static string GetClassText<T>(this string Value)
{
Type type = typeof(T);
var property = type.GetProperty(Value);
var attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(property, typeof(DescriptionAttribute));
return attribute?.Description;
}
}
}