通过特性(attribute)为枚举添加更多信息示例
发布时间:2023-10-10 09:22:06
标签: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();
}


猜你喜欢
- 在Android开发中,Animation是用来给控件制作效果的。大多数的控件都可以用这个类,这个类包含了4种基本动作,分别为移动,旋转,淡
- 当图像信息量较大,采用以上直接显示的方法,可能前面一部分显示后,显示后面一部分时,由于后面一部分还未从文件读出,使显示呈斑驳现象。为了提高显
- Feign获取异常信息最近在使用Feign调用时,出现了异常,原本使用的是fallback,直接返回了自定义的结果@Override &nb
- 下面通过代码看下springboot 跨域配置类,代码如下所示:ackage org.fh.config;import java.io.IO
- 问题描述在使用poi-tl word模版工具时,发现生成的文档中,图片格式为嵌入型,有的图片甚至被表格遮挡一半。而自己想要的图片格式为上下型
- 本文为大家分享了 Android Retrofit 2.0框架上传图片解决方案,具体内容如下1.单张图片的上传/** * 上传一
- 将SuperSocket封装成类库之后可以将其集成进各种类型的应用,而不仅仅局限于控制台应用程序了,从而应用于不同的场景。这里以Telnet
- 记录一下使用IDEA创建servlet并使用Tomcat本地部署的过程。需要安装好的软件首先IDEA社区版不支持Java EE,因此要使用U
- 考虑一个场景,轮流打印0-100以内的技术和偶数。通过使用 synchronize 的 wait,notify机制就可以实现,核心思路如下:
- 一、什么是 RestTemplate?RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK Ht
- springmvc的图片上传1.导入相应的pom依赖 <dependency> <groupId>co
- 效果图如下所示:一、shape 样式:(在drawable新建--》new--》Drawable resource file 在父级标签se
- Date类概述java.util.Date类 表示特定的瞬间,精确到毫秒。 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分
- 指定相关的测试代码首先,写一个用于测试的关于Main(String[] args)参数输入有关的代码类,如下:using System;pu
- 简介:Springboot使用Mybatis&Mybatis-plus 两者文件映射配置略有不同,之前我用的是Mybatis,但公司
- 前言本文将带您了解在 Flutter 中制作翻转卡片动画的两个完整示例。第一个示例从头开始实现,第二个示例使用第三方包。闲话少说,让我们动手
- 了解过spring-Boot这个技术的,应该知道Spring-Boot的核心配置文件application.properties,当然也可以
- Android 倒计时一般实现方式:handler+postDelayed() 方式Timer + TimerTask + handler
- 一、前言跟很多小伙伴聊天,发现一个严重的问题,很多小伙伴横向发展的貌似很不错,很多技术都能说出一二,但是如果在某个技术上深挖一下就不行了,问
- 本文实例讲述了java基于swing实现的五子棋游戏代码。分享给大家供大家参考。主要功能代码如下:import java.awt.*;imp