C#獲取Description特性的擴(kuò)展類詳解
C#中Description特性主要用于枚舉和屬性,方法比較簡(jiǎn)單,記錄一下以便后期使用。
擴(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("測(cè)試枚舉名")]
enum TestEnum
{
[Description("測(cè)試")]
Test1
}
[Description("測(cè)試類名")]
class TestClass
{
[Description("測(cè)試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;
}隨便整一個(gè)枚舉
public enum ModuleType
{
/// <summary>
/// 中國(guó)
/// </summary>
[Description("中國(guó)")]
ZH = 1,
/// <summary>
/// 美國(guó)
/// </summary>
[Description("美國(guó)")]
MG = 2
}到此這篇關(guān)于C#獲取Description特性的擴(kuò)展類詳解的文章就介紹到這了,更多相關(guān)C#獲取Description特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity實(shí)現(xiàn)簡(jiǎn)單的多人聊天工具
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡(jiǎn)單的多人聊天工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C#線程委托BeginInvoke與EndInvoke的用法
這篇文章介紹了C#線程委托BeginInvoke與EndInvoke的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
C#使用JArray和JObject封裝JSON對(duì)象
這篇文章介紹了C#使用JArray和JObject封裝JSON對(duì)象的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
js substr,substring與java substring和C# substring的區(qū)別解析
本篇文章主要是對(duì)js中substr,substring與java中substring和C#中substring的區(qū)別進(jìn)行了介紹,需要的朋友可以過來(lái)參考下,希望對(duì)大家有所幫助2014-01-01

