通过特性(attribute)为枚举添加更多信息示例
更新时间:2020年6月25日 11:37 点击:1712
特性(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#编程中枚举类型的使用,是C#入门学习中的基础知识,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了TypeScript魔法堂之枚举的超实用手册,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-29
- 这篇文章主要介绍了C# 枚举的简单使用,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...2021-03-13
- 这篇文章主要介绍了c#共有其中变量类型有:静态变量、实类变量、数组元素、数值参数、引用参数、输出参数和局部变量,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了C#中Property和Attribute的区别,较为详细的分析了C#中Property和Attribute的功能、定义、区别及使用时的相关注意事项,需要的朋友可以参考下...2020-06-25
- 这篇文章主要给大家介绍了关于C#如何给枚举类型增加一个描述特性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C# 枚举与位枚举的相关资料,文中讲解非常细致,帮助大家更好的理解和学习枚举和位枚举,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了关闭所有窗口的方法,原理是枚举所有窗口句柄,然后发送WM_CLOSE消息来关闭窗口,需要的朋友可以参考下...2020-04-25
- 下面小编就为大家带来一篇全面了解结构体、联合体和枚举类型。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要给大家介绍了关于C#从foreach语句中枚举元素看数组的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2020-06-25
- 字符串可以向int, bool等类型转变,但是字符串是否可以向枚举转变呢?一起看下边的例子...2020-06-25
- 在应用枚举的时候,时常需要将枚举和数值相互转换的情况。有时候还需要转换成相应的中文。下面介绍一种方法...2020-06-25
c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
这篇文章主要介绍了c#入门之枚举和结构体使用详解,最后提供了编写控制台应用程序接收字符串并做相应处理的小示例,需要的朋友可以参考下...2020-06-25- 这篇文章主要给大家介绍了关于C#如何获取枚举的描述属性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了.NET中的枚举用法,分析了枚举的定义、转换、判定等常见用法,需要的朋友可以参考下...2021-09-22
Android 开发Missing contentDescription attribute on image in XML
下面我整理了自己在android开发时碰到的一些小问题,包括有Missing contentDescription attribute on image in XML与Buttons in button bars should be borderless问题...2016-09-20- 这篇文章主要给大家介绍了关于C#如何利用反射将枚举绑定到下拉框的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧...2020-06-25
- 下面小编就为大家带来一篇JS Attribute属性操作详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
- 这篇文章主要给大家介绍了关于Swift枚举的一些小用法,文中通过示例代码介绍的非常详细,对大家学习或者使用Swift具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
- 本篇文章主要是对C#中的枚举进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25