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

(0)

相关推荐

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

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

  • C#特性(Attribute)

    一.什么是特性 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.您可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的. 特性(Attribute)用于添加元数据,如编译器指令和注释.描述.方法.类等其他信息..Net 框架提供了两种类型的特性:预定义特性和自定义特性. 特性的语法如下: [attribute(positional_parameters, name_par

  • C#自定义特性(Attribute)详解

    在前面介绍的代码中有使用特性,这些特性都是Microsoft定义好的,作为.NET Framework类库的一部分,许多特性都得到了C#编译器的支持..NET Frmework也允许定义自己的特性.自定义特性允许把自定义元数据与程序元素关联起来.这些元数据是在编译过程中创建的,并嵌入到程序集中.这些特性不会影响编译过程,因为编译器不能识别它们,但这些特性在应用于程序元素时,可以在编译好的程序集中用作元数据.这些元数据在文档说明中很有用.使自定义特性起很大作用的是反射(https://www.jb

  • .NET获取枚举DescriptionAttribute描述信息性能改进的多种方法

    一. DescriptionAttribute的普通使用方式 1.1 使用示例 DescriptionAttribute特性可以用到很多地方,比较常见的就是枚举,通过获取枚举上定义的描述信息在UI上显示,一个简单的枚举定义: public enum EnumGender { None, [System.ComponentModel.Description("男")] Male, [System.ComponentModel.Description("女")] Fem

  • mysql添加备注信息的实现

    前言 这连天有人问我一些mysql的备注信息,不得已还是写一遍博客吧 1.创建表的时候,添加表名备注和字段备注 CREATE TABLE `healerjean_comment` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL COMMENT '名字备注', `email` varchar(64) NOT NULL, `message` text , PRIMARY KEY (`id`), KEY `i

  • 如何在 iOS 应用中添加位置信息

    最近要在 iOS 应用中添加位置信息, 需要满足的需求如下: 应用在前台时能够获取位置信息: 通过切换. Home 按键将应用切换到后台时,停止获取位置信息: 应用程序在前台运行, 直接锁定屏幕时,能够继续获取位置信息: 接下来逐步实现这三个需求. 获取设备位置信息 在 iOS 上获取位置信息是很容易的, 网上的资料也很多, 我的代码如下: // make sure location service is enabled. if (!CLLocationManager.LocationServi

  • C#实现给图片添加日期信息的示例详解

    实践过程 效果 代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public string flag = null; PropertyItem[] pi; string TakePicDateTime; int SpaceLocation; string pdt; string ptm; Bitmap Pic; Graphics g; Thread td; private void

  • AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)

    注:添加球员的功能无指定技术要求,添加球员的页面也无具体样式要求. 1.实现上图页面所有元素,页面布局规整,跟上图效果一致 2.实现文案显示,按效果显示 3.实现查询,实现查询敏感词过滤,实现查询后列表变化 4.实现倒序,实现正序,下拉列表排序效果都实现 5.按钮背景一致,按钮样式 6.实现添加球员页面,添加球员页面样式,添加球员功能,添加球员必填项判断,添加完球员后能显示在表格内,已存在球员判重. 7.表格样式跟上图样式一致 代码: <!DOCTYPE html> <html lang

  • Python向日志输出中添加上下文信息

    除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如:远程客户端的IP地址和用户名.这里我们来介绍以下几种实现方式: 通过向日志记录函数传递一个extra参数引入上下文信息 使用LoggerAdapters引入上下文信息 使用Filters引入上下文信息 一.通过向日志记录函数传递一个extra参数引入上下文信息 前面我们提到过,可以通过向日志记录函数传递一个extra参数来实现向日志输出

  • Pycharm新建模板默认添加个人信息的实例

    在pycharm使用过程中,对于每次新建的python文件的时候,关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2.Editor –> File and Code Templates –> Python Script 3.填写个人信息 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:${USER} # datetime:${DATE} ${TIME}

随机推荐