当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-10-28

    本文导语:  特性(Attribute)是将额外数据关联到一个属性(以及其他构造)的一种方式,而枚举则是在编程中最常用的一种构造,枚举本质上其实是一些常量值,相对于直接使用这些常量值,枚举为我们提供了更好的可读性。我们知道枚举的基...

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

在枚举中使用DescriptionAttribute特性

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

代码如下:

enum Fruit
{
    [Description("苹果")]
    Apple,
    [Description("橙子")]
    Orange,
    [Description("西瓜")]
    Watermelon
}

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

代码如下:

///
/// 获取枚举描述特性值
///
///
/// 枚举值
/// 枚举值的描述/returns>
public static string GetDescription(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();
}

    
 
 

您可能感兴趣的文章:

  • php通过socket_bind()设置IP地址代码示例
  • jquery 通过name快速取值示例
  • python通过scapy获取局域网所有主机mac地址示例
  • 通过spring用beanshell实现java接口示例
  • c#通过unicode编码判断字符是否为中文示例分享
  • 输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程
  • http basic authentication通过post方式访问api示例分享 basic认证示例
  • java通过共享变量结束run停止线程的方法示例
  • java HashMap通过value反查key的代码示例
  • Android 通过onDraw实现在View中绘图操作的示例
  • jquery通过select列表选择框对表格数据进行过滤示例
  • php通过字符串调用函数示例
  • 通过java api实现解压缩zip示例
  • yii框架通过控制台命令创建定时任务示例
  • Android学习笔记--通过Application传递数据代码示例
  • java通过复选框控件数组实现添加多个复选框控件示例分享
  • java不通过配置文件初始化logger示例
  • android通过google api获取天气信息示例
  • C#通过接口与线程通信(捕获线程状态)示例代码
  • java通过url读取文件内容示例
  • C++通过msxml调用webservice示例分享
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • applet可以不通过数字签名,通过设置IE直接在本地访问本地文件吗
  • 通过javascript库JQuery实现页面跳转功能代码
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • 紧急求救!能通过jdbc怎样连接sqlsever 然后通过 for xml 关键字得到xml流吗?
  • linux下通过crond实现自动执行程序
  • 我想我的网站屏蔽掉通过某些网站过来的访问,我想通过htaccess 文件来做,请大家帮帮我。
  • 通过docker commit命令保存对docker容器的修改
  • 如何通过INTERNET访问通过共项一条线路上网的局域网中的机器???
  • 通过docker run命令运行新的docker镜像
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • 通过docker ps命令检查运行中的docker镜像
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Session id实现通过Cookie来传输方法及代码参考
  • http basic authentication通过post方式访问api示例分享 basic认证示例 iis7站长之家
  • 通过docker search命令搜索可用docker镜像
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • Python3通过request.urlopen实现Web网页图片下载
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • .NET下 c#通过COM组件操作并导出Excel实例代码
  • 工作站Redhat Linux7.2如何通过NT4.0 proxy代理服务器上网,我不能通过其验证!请高手指点思路和方法!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3