C#獲取Description特性的擴(kuò)展類詳解
更新時間:2022年06月24日 08:19:36 作者:time-flies
這篇文章主要和大家詳細(xì)介紹一下C#獲取Description特性的擴(kuò)展類,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定的幫助,需要的可以參考一下
C#中Description特性主要用于枚舉和屬性,方法比較簡單,記錄一下以便后期使用。
擴(kuò)展類DescriptionExtension代碼如下:
using System;
using System.ComponentModel;
using System.Reflection;
/// <summary>
/// 描述特性的讀取擴(kuò)展類
/// </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));補(bǔ)充:
C#利用擴(kuò)展方法獲得枚舉的Description
/// <summary>
/// 擴(kuò)展方法,獲得枚舉的Description
/// </summary>
/// <param name="value">枚舉值</param>
/// <param name="nameInstead">當(dāng)枚舉值沒有定義DescriptionAttribute,是否使用枚舉名代替,默認(rèn)是使用</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
}到此這篇關(guān)于C#獲取Description特性的擴(kuò)展類詳解的文章就介紹到這了,更多相關(guān)C#獲取Description特性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#線程委托BeginInvoke與EndInvoke的用法
這篇文章介紹了C#線程委托BeginInvoke與EndInvoke的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
js substr,substring與java substring和C# substring的區(qū)別解析
本篇文章主要是對js中substr,substring與java中substring和C#中substring的區(qū)別進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01

