
通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。
自定义打印特性
[AttributeUsage(AttributeTargets.FIEld)]public class EnumdisplayAttribute : Attribute{ public EnumdisplayAttribute(string displayStr) { display = displayStr; } public string display { get; private set; }}打印特性定义很简单,只含有一个字符串属性。
定义一个枚举
public enum TestEnum{ [Enumdisplay("一")] one,[Enumdisplay("二")] two,three}枚举类型one,two均增加了一个打印特性。
增加枚举扩展方法取得打印特性值
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; }}获取枚举值对应的枚举filed字符串 var fIEldname = Enum.Getname(typeof(TestEnum),t);
获取filed对应的所有自定义特性集合 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扩展说明
此方法不仅可以给枚举类型增加说明特性,亦可给自定义类型的属性,方法增加自定义特性。。
在使用反射使GetFIEld(string name) getmethod(string name) GetProperty(string name)等均需要字符串
在获取自定义类型属性或方法名称字符串时可以使用 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#枚举值增加特性说明(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
总结以上是内存溢出为你收集整理的c#枚举值增加特性说明(推荐)全部内容,希望文章能够帮你解决c#枚举值增加特性说明(推荐)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)