C#如何給枚舉類(lèi)型增加一個(gè)描述特性詳解
前言
相信很多人對(duì)枚舉并不陌生,枚舉可以很方便和直觀的管理一組特定值。如果我們?cè)陧?yè)面上直接輸出我們希望匹配的漢語(yǔ)意思或則其他滿足我們需求的語(yǔ)句就更好了,當(dāng)然,通常小伙伴們都會(huì)再頁(yè)面上if(enum==1) “我是一個(gè)枚舉”或者switch(enum)這種方式解決。
枚舉的優(yōu)點(diǎn):
<1>枚舉可以使代碼更易于維護(hù),有助于確保給變量指定合法的、期望的值。
<2>枚舉使代碼更清晰,允許用描述性的名稱(chēng)表示整數(shù)值,而不是用含義模糊的數(shù)來(lái)表示。
<3>枚舉使代碼更易于鍵入。在給枚舉類(lèi)型的實(shí)例賦值時(shí),VS.NET IDE會(huì)通過(guò)IntelliSense彈出一個(gè)包含可接受值的列表框,減少了按鍵次數(shù),并能夠讓我們回憶起可能的值
那今天我們就來(lái)介紹一種更優(yōu)雅的解決方法
開(kāi)整
先定義一個(gè)枚舉類(lèi)
enum StatusEnum { [Description("修改")] Update = 1, [Description("新增")] Insert = 2, [Description("刪除")] Delete = 3 }
Description是屬性特性的意思。記住即可
大家要記住,所有的特性類(lèi)必須繼承自 Attribute,所以,我們自定義一個(gè)特性類(lèi)
/// <summary> /// 備注特性 /// </summary> public class RemarkAttribute : Attribute { /// <summary> /// 備注 /// </summary> public string Remark { get; set; } public RemarkAttribute(string remark) { this.Remark = remark; } }
有了這個(gè)特性類(lèi)之后呢,我們還需要一個(gè)枚舉擴(kuò)展類(lèi)
/// <summary> /// 枚舉擴(kuò)展類(lèi) /// </summary> public static class EnumExtension { /// <summary> /// 獲取枚舉的備注信息 /// </summary> /// <param name="em"></param> /// <returns></returns> public static string GetRemark(this Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); if (fi == null) { return value.ToString(); } object[] attributes = fi.GetCustomAttributes(typeof(RemarkAttribute), false); if (attributes.Length > 0) { return ((RemarkAttribute)attributes[0]).Remark; } else { return value.ToString(); } } public static string GetEnumDescription(this Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); if (attributes.Length > 0) { return attributes[0].Description; } else { return value.ToString(); } } }
需要引入命名空間:
using System.Collections.Generic; using System.ComponentModel;
有了這個(gè)枚舉擴(kuò)展類(lèi),我們就可以直接使用了
Console.WriteLine((int)StatusEnum.Insert);//輸出原有枚舉值 Console.WriteLine(StatusEnum.Insert.GetRemark());//獲取枚舉備注信息 Console.WriteLine(StatusEnum.Insert.GetEnumDescription());//獲取枚舉特性值
調(diào)試過(guò)程
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 簡(jiǎn)述C#枚舉高級(jí)戰(zhàn)術(shù)
- 詳細(xì)了解C# 枚舉與位枚舉
- 快速學(xué)習(xí)c# 枚舉
- C#如何獲取枚舉的描述屬性詳解
- C#中如何為枚舉類(lèi)型添加描述方法【小技巧】
- C#如何利用反射將枚舉綁定到下拉框詳解
- C# Ado.net實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程列表及參數(shù)信息示例
- C#開(kāi)發(fā)微信門(mén)戶(hù)及應(yīng)用(4) 關(guān)注用戶(hù)列表及詳細(xì)信息管理
- C#獲取串口列表實(shí)現(xiàn)實(shí)時(shí)監(jiān)控串口
- C#實(shí)現(xiàn)無(wú)限級(jí)聯(lián)下拉列表框
- C#將HashTable中鍵列表或值列表復(fù)制到一維數(shù)組的方法
- C#操作DataTable方法實(shí)現(xiàn)過(guò)濾、取前N條數(shù)據(jù)及獲取指定列數(shù)據(jù)列表的方法
- C#使用linq計(jì)算執(zhí)行元素在列表中出現(xiàn)次數(shù)的方法
- C#查找列表中所有重復(fù)出現(xiàn)元素的方法
- C# 實(shí)現(xiàn)枚舉轉(zhuǎn)列表
相關(guān)文章
C#檢測(cè)遠(yuǎn)程計(jì)算機(jī)端口是否打開(kāi)的方法
這篇文章主要介紹了C#檢測(cè)遠(yuǎn)程計(jì)算機(jī)端口是否打開(kāi)的方法,實(shí)例分析了C#實(shí)現(xiàn)檢測(cè)遠(yuǎn)程端口開(kāi)啟的技巧,需要的朋友可以參考下2015-03-03C#使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容
HtmlAgilityPack是一個(gè)HTML解析類(lèi)庫(kù),這篇文章主要為大家詳細(xì)介紹了C#如何使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容,感興趣的小伙伴可以參考一下2023-12-12判斷一個(gè)整數(shù)是否是2的N次冪實(shí)現(xiàn)方法
下面小編就為大家分享一篇判斷一個(gè)整數(shù)是否是2的N次冪實(shí)現(xiàn)方法,實(shí)例簡(jiǎn)潔,具有很好的參考價(jià)值。希望對(duì)大家有所幫助2017-11-11Unity3D Shader實(shí)現(xiàn)鏡子效果
這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實(shí)現(xiàn)鏡子效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05winform開(kāi)發(fā)使用通用多線程基類(lèi)分享(以隊(duì)列形式)
多線程這個(gè)概念大家都很熟悉,對(duì)于winform的開(kāi)發(fā)人員來(lái)說(shuō),用的還是多的.但估計(jì)都是用Timer,或者backgroundWorker,為大家寫(xiě)了一個(gè)多線程的基類(lèi),只有你用到多線程拿過(guò)來(lái)就可以用了2013-12-12c#異步讀取數(shù)據(jù)庫(kù)與異步更新ui的代碼實(shí)現(xiàn)
這篇文章主要介紹了c#從數(shù)據(jù)庫(kù)里取得數(shù)據(jù)并異步更新ui的方法,大家參考使用吧2013-12-12