当前位置: 移动技术网 > IT编程>开发语言>c# > c#枚举值增加特性说明(推荐)

c#枚举值增加特性说明(推荐)

2019年07月18日  | 移动技术网IT编程  | 我要评论
通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。 自定义打印特性 [attributeusage(attributetargets.field)

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

自定义打印特性

[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#枚举值增加特性说明(推荐),希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网