c#枚舉值增加特性說(shuō)明(推薦)
通過(guò)特性給一個(gè)枚舉類(lèi)型每個(gè)值增加一個(gè)字符串說(shuō)明,用于打印或顯示。
自定義打印特性
[AttributeUsage(AttributeTargets.Field)] public class EnumDisplayAttribute : Attribute { public EnumDisplayAttribute(string displayStr) { Display = displayStr; } public string Display { get; private set; } }
打印特性定義很簡(jiǎn)單,只含有一個(gè)字符串屬性。
定義一個(gè)枚舉
public enum TestEnum { [EnumDisplay("一")] one, [EnumDisplay("二")] two, three }
枚舉類(lèi)型one,two均增加了一個(gè)打印特性。
增加枚舉擴(kuò)展方法取得打印特性值
public static class TestEnumExtentions { public static string Display(this TestEnum t) { var fieldName = Enum.GetName(typeof(TestEnum), t); var attributes = typeof(TestEnum).GetField(fieldName).GetCustomAttributes(false); var enumDisplayAttribute = attributes.FirstOrDefault(p => p.GetType().Equals(typeof(EnumDisplayAttribute))) as EnumDisplayAttribute; return enumDisplayAttribute == null ? fieldName : enumDisplayAttribute.Display; } }
獲取枚舉值對(duì)應(yīng)的枚舉filed字符串 var fieldName = Enum.GetName(typeof(TestEnum), t);
獲取filed對(duì)應(yīng)的所有自定義特性集合 var attributes = typeof(TestEnum).GetField(fieldName).GetCustomAttributes(false);
獲取EnumDisplayAttribute特性 var enumDisplayAttribute = attributes.FirstOrDefault(p => p.GetType().Equals(typeof(EnumDisplayAttribute))) as EnumDisplayAttribute
;
如存在EnumDisplayAttribute特性返回其Display值,否則返回filed字符串 return enumDisplayAttribute == null ? fieldName : enumDisplayAttribute.Display;
使用示例
class Program { static void Main(string[] args) { TestEnum e = TestEnum.one; Console.WriteLine(e.Display()); TestEnum e1 = TestEnum.three; Console.WriteLine(e1.Display()); Console.ReadKey(); } }
輸出:
一 three 擴(kuò)展說(shuō)明
此方法不僅可以給枚舉類(lèi)型增加說(shuō)明特性,亦可給自定義類(lèi)型的屬性,方法增加自定義特性。。
在使用反射使GetField(string name) GetMethod(string name) GetProperty(string name)
等均需要字符串
在獲取自定義類(lèi)型屬性或方法名稱(chēng)字符串時(shí)可以使用 nameof
public class T { public void Get() { } public int Num { get; set; } } T tt = new T(); Console.WriteLine(nameof(tt.Num)); Console.WriteLine(nameof(tt.Get));
以上所述是小編給大家介紹的c#枚舉值增加特性說(shuō)明(推薦),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
C#實(shí)現(xiàn)同Active MQ通訊的方法
這篇文章主要介紹了C#實(shí)現(xiàn)同Active MQ通訊的方法,簡(jiǎn)單分析了Active MQ的功能及C#與之通訊的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07c# 對(duì)cookies(增、刪、改、查)的操作方法
以前覺(jué)得cookies操作無(wú)非就那么幾種,但是“杯具事件”還是很多的,下面分享一下對(duì)cookies的簡(jiǎn)單操作2013-04-04C#更新SQLServer中TimeStamp字段(時(shí)間戳)的方法
這篇文章主要介紹了C#更新SQLServer中TimeStamp字段(時(shí)間戳)的方法,涉及C#操作數(shù)據(jù)庫(kù)字段的相關(guān)技巧,需要的朋友可以參考下2015-05-05C#打包應(yīng)用程序,與.NETFramework介紹
C#打包應(yīng)用程序,與.NETFramework介紹,需要的朋友可以參考一下2013-05-05C#調(diào)用FFplay實(shí)現(xiàn)播放視頻功能
這篇文章主要為大家詳細(xì)介紹了C#如何調(diào)用FFplay實(shí)現(xiàn)播放視頻功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10使用C#表達(dá)式樹(shù)實(shí)現(xiàn)對(duì)象的深克隆(實(shí)例詳解)
C# 的表達(dá)式樹(shù)提供了一個(gè)強(qiáng)大的機(jī)制,可以將代碼以數(shù)據(jù)結(jié)構(gòu)的形式表示出來(lái),使得代碼可以在運(yùn)行時(shí)進(jìn)行檢查、修改或執(zhí)行,這為動(dòng)態(tài)查詢(xún)生成、代碼優(yōu)化和動(dòng)態(tài)編程提供了很多可能性,這篇文章主要介紹了使用C#強(qiáng)大的表達(dá)式樹(shù)實(shí)現(xiàn)對(duì)象的深克隆,需要的朋友可以參考下2024-05-05C# 通過(guò)ServiceStack 操作Redis
這篇文章主要介紹了C# 通過(guò)ServiceStack 操作Redis的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03C#實(shí)現(xiàn)連接電子秤串口自動(dòng)稱(chēng)重
這篇文章介紹了C#實(shí)現(xiàn)連接電子秤串口自動(dòng)稱(chēng)重的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04C#中JSON轉(zhuǎn)為實(shí)體類(lèi)和List以及結(jié)合使用
開(kāi)發(fā)中經(jīng)常遇到將JSON字符串轉(zhuǎn)換為L(zhǎng)ist的需求,下面這篇文章主要給大家介紹了關(guān)于C#中JSON轉(zhuǎn)為實(shí)體類(lèi)和List以及結(jié)合使用的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01