c#枚举值增加特性说明(推荐)
通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。
自定义打印特性
[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#枚举值增加特性说明(推荐),希望对大家有所帮助
上一篇: PHP封装CURL扩展类实例
下一篇: PHP计算日期相差天数实例分析