Csharp/C#教程:c#枚举值增加特性说明(推荐)分享

通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。

自定义打印特性

[AttributeUsage(AttributeTargets.Field)] publicclassEnumDisplayAttribute:Attribute { publicEnumDisplayAttribute(stringdisplayStr) { Display=displayStr; } publicstringDisplay { get; privateset; } }

打印特性定义很简单,只含有一个字符串属性。

定义一个枚举

publicenumTestEnum { [EnumDisplay("一")] one, [EnumDisplay("二")] two, three }

枚举类型one,two均增加了一个打印特性。

增加枚举扩展方法取得打印特性值

publicstaticclassTestEnumExtentions { publicstaticstringDisplay(thisTestEnumt) { varfieldName=Enum.GetName(typeof(TestEnum),t); varattributes=typeof(TestEnum).GetField(fieldName).GetCustomAttributes(false); varenumDisplayAttribute=attributes.FirstOrDefault(p=>p.GetType().Equals(typeof(EnumDisplayAttribute)))asEnumDisplayAttribute; returnenumDisplayAttribute==null?fieldName:enumDisplayAttribute.Display; } }

获取枚举值对应的枚举filed字符串varfieldName=Enum.GetName(typeof(TestEnum),t);

获取filed对应的所有自定义特性集合varattributes=typeof(TestEnum).GetField(fieldName).GetCustomAttributes(false);

获取EnumDisplayAttribute特性varenumDisplayAttribute=attributes.FirstOrDefault(p=>p.GetType().Equals(typeof(EnumDisplayAttribute)))asEnumDisplayAttribute;

如存在EnumDisplayAttribute特性返回其Display值,否则返回filed字符串returnenumDisplayAttribute==null?fieldName:enumDisplayAttribute.Display;

使用示例

classProgram { staticvoidMain(string[]args) { TestEnume=TestEnum.one; Console.WriteLine(e.Display()); TestEnume1=TestEnum.three; Console.WriteLine(e1.Display()); Console.ReadKey(); } }

输出:

一 three 扩展说明

此方法不仅可以给枚举类型增加说明特性,亦可给自定义类型的属性,方法增加自定义特性。。

在使用反射使GetField(stringname)GetMethod(stringname)GetProperty(stringname)等均需要字符串

在获取自定义类型属性或方法名称字符串时可以使用nameof

publicclassT { publicvoidGet() {} publicintNum{get;set;} } Ttt=newT(); Console.WriteLine(nameof(tt.Num)); Console.WriteLine(nameof(tt.Get));

上述就是C#学习教程:c#枚举值增加特性说明(推荐)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/907821.html

(0)
上一篇 2021年10月25日
下一篇 2021年10月25日

精彩推荐