【点滴积累】通过特性(Attribute)为枚举添加更多的信息

本文介绍如何使用DescriptionAttribute特性增强枚举的功能,通过反射获取枚举成员的描述信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://www.cnblogs.com/IPrograming/archive/2013/05/26/Enum_DescriptionAttribute.html

 

【点滴积累】通过特性(Attribute)为枚举添加更多的信息

 

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

在枚举中使用DescriptionAttribute特性

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

复制代码
1     enum Fruit
2     {
3         [Description("苹果")]
4         Apple,
5         [Description("橙子")]
6         Orange,
7         [Description("西瓜")]
8         Watermelon
9     }
复制代码

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

复制代码
 1         /// <summary>
 2         /// 获取枚举描述特性值
 3         /// </summary>
 4         /// <typeparam name="TEnum"></typeparam>
 5         /// <param name="enumerationValue">枚举值</param>
 6         /// <returns>枚举值的描述/returns>
 7         public static string GetDescription<TEnum>(this TEnum enumerationValue)
 8             where TEnum : struct, IComparable, IFormattable, IConvertible
 9         {
10             Type type = enumerationValue.GetType();
11             if (!type.IsEnum)
12             {
13                 throw new ArgumentException("EnumerationValue必须是一个枚举值", "enumerationValue");
14             }
15 
16             //使用反射获取该枚举的成员信息
17             MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
18             if (memberInfo != null && memberInfo.Length > 0)
19             {
20                 object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
21 
22                 if (attrs != null && attrs.Length > 0)
23                 {
24                     //返回枚举值得描述信息
25                     return ((DescriptionAttribute)attrs[0]).Description;
26                 }
27             }
28             //如果没有描述特性的值,返回该枚举值得字符串形式
29             return enumerationValue.ToString();
30         }
复制代码

 

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

复制代码
1     public static void Main(string[] args)
2     {
3         //description = "橙子"
4         string description = Fruit.Orange.GetDescription();
5     }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值