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

时间:2023-10-10 09:22:06 

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

在枚举中使用DescriptionAttribute特性

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


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

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


/// <summary>
/// 获取枚举描述特性值
/// </summary>
/// <typeparam name="TEnum"></typeparam>
/// <param name="enumerationValue">枚举值</param>
/// <returns>枚举值的描述/returns>
public static string GetDescription<TEnum>(this TEnum enumerationValue)
   where TEnum : struct, IComparable, IFormattable, IConvertible
{
   Type type = enumerationValue.GetType();
   if (!type.IsEnum)
   {
  throw new ArgumentException("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;
  }
   }
   //如果没有描述特性的值,返回该枚举值得字符串形式
   return enumerationValue.ToString();
}

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


public static void Main(string[] args)
{
//description = "橙子"
string description = Fruit.Orange.GetDescription();
}

标签:attribute,枚举
0
投稿

猜你喜欢

  • Android开发中的几种网络请求方式详解

    2021-06-01 17:45:21
  • 解决MyEclipse中的Building workspace问题的三个方法

    2023-10-25 09:00:51
  • 如何在c语言下关闭socket

    2021-12-26 10:22:46
  • @CacheEvict 清除多个key的实现方式

    2023-11-21 08:28:04
  • spring boot整合netty的实现方法

    2021-11-17 04:28:03
  • Android 面试精华题目总结

    2021-08-13 22:15:44
  • Android实现银行卡号扫描识别功能

    2021-09-05 01:56:50
  • 从"Show tabs"了解Android Input系统

    2023-12-21 05:20:49
  • Java实现RedisUtils操作五大集合(增删改查)

    2023-07-13 06:33:14
  • java高级用法之注解和反射讲义

    2023-10-08 14:40:16
  • Android实现滑动效果

    2022-09-20 15:04:24
  • Java中final修饰的方法是否可以被重写示例详解

    2022-02-25 13:35:40
  • 深入分析C#中的异步和多线程

    2021-08-15 19:29:49
  • 自定义BufferedReader的实例

    2021-06-10 08:13:39
  • c#批量上传图片到服务器示例分享

    2022-09-12 10:16:24
  • Nacos框架服务注册实现流程

    2023-07-07 10:18:30
  • Java实战之在线寄查快递系统的实现

    2023-08-10 21:52:23
  • Android Studio真机无线连接USB设备调试运行详解流程

    2023-12-13 00:37:37
  • C# DateTime.ToString根据不同语言生成相应的时间格式

    2022-04-16 12:34:51
  • android开发教程之view组件添加边框示例

    2023-05-24 17:16:44
  • asp之家 软件编程 m.aspxhome.com