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

 更新时间:2014年01月22日 15:56:43   作者:  
这篇文章主要介绍了通过特性(Attribute)为枚举添加更多的信息,大家参考使用吧

特性(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();
}

相关文章

  • C#实现Windows服务安装卸载开启停止

    C#实现Windows服务安装卸载开启停止

    本文主要介绍了C#实现Windows服务安装卸载开启停止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • C#比较时间大小的方法总结

    C#比较时间大小的方法总结

    在本篇内容里小编给大家分享的是关于C#比较时间大小的方法总结,对此有需要的朋友们可以学习下。
    2018-12-12
  • 浅析WPF中Binding的数据校验和类型转换

    浅析WPF中Binding的数据校验和类型转换

    在WPF开发中,Binding实现了数据在Source和Target之间的传递和流通,那在WPF开发中,如何实现数据的校验和类型转换呢,下面就跟随小编一起学习一下吧
    2024-03-03
  • C# 如何获取出错的错误所在行数信息

    C# 如何获取出错的错误所在行数信息

    本文主要介绍 C# 中获取错误所在行的方法,在开发过程中或是用户在使用过程中,出错的话方便我们快速定位到错误的位置,以便我们处理。
    2016-04-04
  • C#使用哈希表实现XML文件查询

    C#使用哈希表实现XML文件查询

    这篇文章主要为大家详细介绍了C#如何使用哈希表实现XML文件查询功能,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-02-02
  • C#读取本地网络配置信息全攻略分享

    C#读取本地网络配置信息全攻略分享

    在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在 C# 编程的世界里,我们又该如何巧妙地读取这些至关重要的本地网络配置信息呢?接下来,就让我们一同踏上探索之旅
    2025-01-01
  • C#实现滑动开关效果

    C#实现滑动开关效果

    这篇文章主要为大家详细介绍了C#实现滑动开关效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#异步编程几点需要注意的地方

    C#异步编程几点需要注意的地方

    这篇文章我们来讨论下关于C#异步编程几个不成文的建议,希望对你写出高性能的异步编程代码有所帮助
    2020-05-05
  • C# WinForm实现自动更新程序的方法详解

    C# WinForm实现自动更新程序的方法详解

    这一篇就着重写一下客户端的代码,客户端主要实现的有:启动后检测本地的xml文件,然后发送到服务器获取需要更新的文件以及版本列表,感兴趣的小伙伴可以了解一下
    2022-10-10
  • C# AttributeUsage使用案例详解

    C# AttributeUsage使用案例详解

    这篇文章主要介绍了C# AttributeUsage使用案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论