欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-03 16:32:07
通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。 自定义打印特性 [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#枚举值增加特性说明(推荐),希望对大家有所帮助