获取枚举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 ...
随机推荐
- 定义不同版本的jQuery
<script type="text/javascript" src="/js/jquery-2.0.3.min.js"></script&g ...
- C语言的本质(16)——函数接口的传入参数与传出参数
如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的函数原型为 char *strcp ...
- 【POJ】3468 A Simple Problem with Integers ——线段树 成段更新 懒惰标记
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072K Case Time Limit:2000MS Descr ...
- hdu 5595 GTW likes math(暴力枚举查询)
思路:直接暴力枚举区间[l,r]的整数值,然后max和min就可以了. AC代码: #pragma comment(linker, "/STACK:1024000000,1024000000 ...
- SEO,你敢说你会吗?
SEO从何開始学起?SEO基础知识我们须要掌握哪些?SEO是什么?SEO究竟要怎么做?这些问题无时无刻不在困惑着我们.就我个人一些小观点来谈谈一个站点优化的大致步骤. SEO初期阶段 空间域名:空间跟 ...
- 黑马程序员 Java基础<九>---> 多线程
ASP.Net+Android+IOS开发..Net培训.期待与您交流! 多线程 一.概述: 1.线程是什么 说到线程,我们就得先说说进程.所谓进程,就是一个正在执行(进行)中的程序,每一个进程执行都 ...
- 畅通project(杭电1863)
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- JavaScript阻止事件冒泡
今天在自学敲代码的时候发现了一个问题,当时的例子如下: <!DOCTYPE html> <html lang="en"> <head> < ...
- MSMQ是什么?
MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位 ...
- 基于粒子滤波的物体跟踪 Particle Filter Object Tracking
Video来源地址 一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去.一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu ...