通過(guò)特性(attribute)為枚舉添加更多信息示例
特性(Attribute)是將額外數(shù)據(jù)關(guān)聯(lián)到一個(gè)屬性(以及其他構(gòu)造)的一種方式,而枚舉則是在編程中最常用的一種構(gòu)造,枚舉本質(zhì)上其實(shí)是一些常量值,相對(duì)于直接使用這些常量值,枚舉為我們提供了更好的可讀性。我們知道枚舉的基礎(chǔ)類型只能是值類型(byte、sbyte、short、ushort、int、uint、long 或 ulong),一般的情況下枚舉能夠滿足我們的需求,但是有時(shí)候我們需要為枚舉附加更多信息,僅僅只是使用這些值類型是不夠的,這時(shí)通過(guò)對(duì)枚舉類型應(yīng)用特性可以使枚舉帶有更多的信息。
在枚舉中使用DescriptionAttribute特性
首先引入:using System.ComponentModel 命名空間,下面是一個(gè)枚舉應(yīng)用了DescriptionAttribute特性:
enum Fruit
{
[Description("蘋果")]
Apple,
[Description("橙子")]
Orange,
[Description("西瓜")]
Watermelon
}
下面是一個(gè)獲取Description特性的擴(kuò)展方法:
/// <summary>
/// 獲取枚舉描述特性值
/// </summary>
/// <typeparam name="TEnum"></typeparam>
/// <param name="enumerationValue">枚舉值</param>
/// <returns>枚舉值的描述/returns>
public static string GetDescription<TEnum>(this TEnum enumerationValue)
where TEnum : struct, IComparable, IFormattable, IConvertible
{
Type type = enumerationValue.GetType();
if (!type.IsEnum)
{
throw new ArgumentException("EnumerationValue必須是一個(gè)枚舉值", "enumerationValue");
}
//使用反射獲取該枚舉的成員信息
MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
if (memberInfo != null && memberInfo.Length > 0)
{
object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
{
//返回枚舉值得描述信息
return ((DescriptionAttribute)attrs[0]).Description;
}
}
//如果沒有描述特性的值,返回該枚舉值得字符串形式
return enumerationValue.ToString();
}
最后,我們就可以利用該擴(kuò)展方法獲取該枚舉值得描述信息了:
public static void Main(string[] args)
{
//description = "橙子"
string description = Fruit.Orange.GetDescription();
}
相關(guān)文章
C#實(shí)現(xiàn)Windows服務(wù)安裝卸載開啟停止
本文主要介紹了C#實(shí)現(xiàn)Windows服務(wù)安裝卸載開啟停止,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
淺析WPF中Binding的數(shù)據(jù)校驗(yàn)和類型轉(zhuǎn)換
在WPF開發(fā)中,Binding實(shí)現(xiàn)了數(shù)據(jù)在Source和Target之間的傳遞和流通,那在WPF開發(fā)中,如何實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)和類型轉(zhuǎn)換呢,下面就跟隨小編一起學(xué)習(xí)一下吧2024-03-03
C# 如何獲取出錯(cuò)的錯(cuò)誤所在行數(shù)信息
本文主要介紹 C# 中獲取錯(cuò)誤所在行的方法,在開發(fā)過(guò)程中或是用戶在使用過(guò)程中,出錯(cuò)的話方便我們快速定位到錯(cuò)誤的位置,以便我們處理。2016-04-04
C#實(shí)現(xiàn)滑動(dòng)開關(guān)效果
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)滑動(dòng)開關(guān)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
C# WinForm實(shí)現(xiàn)自動(dòng)更新程序的方法詳解
這一篇就著重寫一下客戶端的代碼,客戶端主要實(shí)現(xiàn)的有:?jiǎn)?dòng)后檢測(cè)本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下2022-10-10

