获取枚举Name,Value,Description两种方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Reflection;
public partial class EnumTest : System.Web.UI.Page
{
/// <summary>
/// 调用获得Name,Value,Description方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
List<EnumModel> modelFirst = MethodOne_GetEnumModel<MyEnum>();
List<EnumModel> modelSecond = MethodTow_GetEnumModel<MyEnum>();
foreach (EnumModel enumModel in modelFirst)
{
Response.Write("枚举Name:" + enumModel.Name + " লল Value: " + enumModel.Value + " ললDescription:" + enumModel.Description + "<br/><br/>");
}
}
/// <summary>
/// 用于测试的枚举
/// </summary>
public enum MyEnum
{
[Description("这是第一个枚举值得描述MyTestA")]
MyA = 0,
[Description("这是第二个枚举值的描述MyTestB")]
MyB = 1,
[Description("这是第三个枚举值的描述MyTestC")]
MyC = 2
}
/// <summary>
/// 用于保存枚举值Name,Value,Description的类
/// </summary>
public class EnumModel
{
public string Description { get; set; }
public string Name { get; set; }
public int Value { get; set; }
}
/// <summary>
/// MethodOne获取枚举的Name,Value,Description
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public List<EnumModel> MethodOne_GetEnumModel<T>()
{
List<EnumModel> listEnumModel = new List<EnumModel>();
#region
/*
* 表示类型声明,类类型,接口类型,数组类型,值类型,枚举类型,类型参数,泛型类型定义,以及开放或封闭构造的泛型。
*/
#endregion
Type type = typeof(T);
#region
/*
* FieldInfo http://msdn.microsoft.com/zh-cn/library/system.reflection.fieldinfo(v=vs.95).aspx
*
*/
#endregion
FieldInfo[] fieldInfos = type.GetFields();
foreach (FieldInfo fieldInfo in fieldInfos)
{
EnumModel enumModel = new EnumModel();
if (!fieldInfo.IsSpecialName)
{
enumModel.Name = fieldInfo.Name;
enumModel.Value = ((T)Enum.Parse(type, fieldInfo.Name)).GetHashCode();
DescriptionAttribute[] enumAttributeList = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (enumAttributeList != null && enumAttributeList.Length > 0)
{
enumModel.Description = enumAttributeList[0].Description;
}
else
{
enumModel.Description = fieldInfo.Name;
}
/*
* 下面的方法也可以获得枚举的描述
dynamic dy = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (dy != null && dy.Length>0)
{
enumModel.Description = dy[0].Description;
}
else
{
enumModel.Description = fieldInfo.Name;
}
*/
listEnumModel.Add(enumModel);
}
}
return listEnumModel;
}
/// <summary>
/// MethodTwo获取枚举的Name,Value,Description
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public List<EnumModel> MethodTow_GetEnumModel<T>()
{
List<EnumModel> listEnumModel = new List<EnumModel>() { };
EnumModel enumModel;
Type type = typeof(T);
foreach (string item in Enum.GetNames(type))
{
enumModel = new EnumModel();
enumModel.Name = item;
FieldInfo fieldInfo = type.GetField(item);
//enumModel.Value = ((T)Enum.Parse(type, item)).GetHashCode();
enumModel.Value = fieldInfo.GetValue(item).GetHashCode();
DescriptionAttribute[] enumAttributeList = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (enumAttributeList != null && enumAttributeList.Length > 0)
{
enumModel.Description = enumAttributeList[0].Description;
}
else
{
enumModel.Description = item;
}
/*
* 下面的方法也可以获得枚举的描述
dynamic dy = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (dy != null && dy.Length>0)
{
enumModel.Description = dy[0].Description;
}
else
{
enumModel.Description = fieldInfo.Name;
}
*/
listEnumModel.Add(enumModel);
}
return listEnumModel;
}
}
获取枚举Name,Value,Description两种方法的更多相关文章
- java 获取键盘输入常用的两种方法
java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...
- QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)
QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioBu ...
- 使用JavaScript获取URL中的参数(两种方法)
本文给大家分享两种方法使用js获取url中的参数,其中方法二是使用的正则表达式方法,大家可以根据需要选择比较好的方法,废话不多说了,直接看详细介绍吧. 方法一: //取url参数 var type = ...
- QT中获取选中的radioButton的两种方法
QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast&l ...
- javascript 获取当前 URL 参数的两种方法
window.location.host; //返回url 的主机部分,例如:www.xxx.com window.location.hostname; //返回www.xxx.com window. ...
- js获取json属性值的两种方法
1.json.XXX 2.json["XXX"] 第二种方法使用场景,当属性值是变量时.如图所示:
- VC++实现获取文件占用空间大小的两种方法(非文件大小)
// GetFileSpaceSize.cpp : Defines the entry point for the console application. // /***************** ...
- 【Jquery】jQuery获取URL參数的两种方法
jQuery获取URL參数的关键是获取到URL,然后对URL进行过滤处理,取出參数. location.href是取得URL.location.search是取得URL"?"之后的 ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
随机推荐
- 2015第6周三ztree的使用
今天第一次真正在开发中使用了ztree组件,在实践过程体会了从生到熟的乐趣,从开始看不太懂ztree的api到后面熟悉理解其API布局,学习其中的各demo,感觉很不错,简单记录下使用ztree的经验 ...
- sed简单实例练习
sedfile内容如下: Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Betty Boop: ...
- 【LeetCode练习题】Reverse Linked List II
Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. F ...
- iOS GCD详解
前言 对初学者来说,GCD似乎是一道迈不过去的坎,很多人在同步.异步.串行.并行和死锁这几个名词的漩涡中渐渐放弃治疗.本文将使用图文表并茂的方式给大家形象地解释其中的原理和规律. 线程.任务和队列的概 ...
- Oracle日志文件常用操作
Oracle关于日志文件基本操作1.查询系统使用的是哪一组日志文件:select * from v$log; 2.查询正在使用的组所对应的日志文件:select * from v$logfile; 3 ...
- 如何灵活利用免费开源图标字体-IcoMoon篇
http://www.zhangxinxu.com/wordpress/2012/06/free-icon-font-usage-icomoon/
- Java生成PDF报表
一.前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iText--用于生成PDF文档的一个Java类库.废话不多说,进入正题. 二.iText简介 iText是著名的开放 ...
- JavaScript 面向对象思想 贪吃蛇游戏
js代码: 游戏的对象 ,食物,蛇 ,游戏控制思路如下 (完整代码在https://github.com/774044859yf/ObjectSnakeGame下载) var snake = { aS ...
- const与重载
转载自CSDN博客:http://blog.csdn.net/polarbearboy/article/details/6762752 (由于该作者也属于转载,不知原出处) PS:我们很易对下面这 ...
- 图的深度优先遍历(DFS) c++ 非递归实现
深搜算法对于程序员来讲是必会的基础,不仅要会,更要熟练.ACM竞赛中,深搜也牢牢占据着很重要的一部分.本文用显式栈(非递归)实现了图的深度优先遍历,希望大家可以相互学习. 栈实现的基本思路是将一个节点 ...