zl程序教程

您现在的位置是:首页 >  其它

当前栏目

通过特性(attribute)为枚举添加更多信息示例

示例 信息 添加 通过 特性 attribute 枚举
2023-06-13 09:15:16 时间

特性(Attribute)是将额外数据关联到一个属性(以及其他构造)的一种方式,而枚举则是在编程中最常用的一种构造,枚举本质上其实是一些常量值,相对于直接使用这些常量值,枚举为我们提供了更好的可读性。我们知道枚举的基础类型只能是值类型(byte、sbyte、short、ushort、int、uint、long或ulong),一般的情况下枚举能够满足我们的需求,但是有时候我们需要为枚举附加更多信息,仅仅只是使用这些值类型是不够的,这时通过对枚举类型应用特性可以使枚举带有更多的信息。

在枚举中使用DescriptionAttribute特性

首先引入:usingSystem.ComponentModel命名空间,下面是一个枚举应用了DescriptionAttribute特性:

复制代码代码如下:


enumFruit
{
   [Description("苹果")]
   Apple,
   [Description("橙子")]
   Orange,
   [Description("西瓜")]
   Watermelon
}

下面是一个获取Description特性的扩展方法:

复制代码代码如下:


///<summary>
///获取枚举描述特性值
///</summary>
///<typeparamname="TEnum"></typeparam>
///<paramname="enumerationValue">枚举值</param>
///<returns>枚举值的描述/returns>
publicstaticstringGetDescription<TEnum>(thisTEnumenumerationValue)
  whereTEnum:struct,IComparable,IFormattable,IConvertible
{
  Typetype=enumerationValue.GetType();
  if(!type.IsEnum)
  {
 thrownewArgumentException("EnumerationValue必须是一个枚举值","enumerationValue");
  }

  //使用反射获取该枚举的成员信息
  MemberInfo[]memberInfo=type.GetMember(enumerationValue.ToString());
  if(memberInfo!=null&&memberInfo.Length>0)
  {
 object[]attrs=memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false);

 if(attrs!=null&&attrs.Length>0)
 {
 //返回枚举值得描述信息
 return((DescriptionAttribute)attrs[0]).Description;
 }
  }
  //如果没有描述特性的值,返回该枚举值得字符串形式
  returnenumerationValue.ToString();
}

最后,我们就可以利用该扩展方法获取该枚举值得描述信息了:

复制代码代码如下:
publicstaticvoidMain(string[]args)
{
//description="橙子"
stringdescription=Fruit.Orange.GetDescription();
}