获取枚举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 ...
随机推荐
- javascript链式调用实现方式总结
方法链一般适合对一个对象进行连续操作(集中在一句代码).一定程度上可以减少代码量,缺点是它占用了函数的返回值. 一.方法体内返回对象实例自身(this) function ClassA(){ this ...
- axis2之webservice
Axis2之webservice超详细教程 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的 ...
- Java webservice
webservice: 就是应用程序之间跨语言的调用 1.xml 2. wsdl: webservice description language web服务描述语言 ...
- 代码管理git总结
1. http://blog.csdn.net/teresa502/article/details/7388834 pwd 当前工作目录 cd(不加参数) 进root cd(folder) 进入文件夹 ...
- #include <boost/shared_array.hpp>
共享数组 共享数组的行为类型于共享指针.关键不同在于共享数组在析构时,默认使用delete[]操作符来释放所含的对象.因为这个操作符只能用于数组对象,共享数组必须通过动态分配的数组的地址来初始化.共享 ...
- swift http请求返回json数据和分析
1 AppDelegate.swift // // AppDelegate.swift // QQDemo // // Created by 赵超 on 14-6-21. // Copyright ( ...
- Windows下搭建Eclipse+Android4.0开发环境
官方搭建步骤: http://developer.android.com/index.html 搭建好开发环境之前须要下载以下几个文件包: 一.安装Java执行环境JRE(没这个Eclipse执行不起 ...
- 关于常用meta的总结
入行也半年了,无数次的想过写博客也无数次的想过第一篇会写什么,一直没有落实.今天心血来潮把博客开了,那就写点东西吧.第一篇就写一写看似简单但又经常不注意到的meta标签吧.(博主经验尚浅,有许多理解不 ...
- 基于zepto的手机焦点图touchstart touchmove
基于zepto的手机焦点图,查看地址:demo (建议使用手机浏览器查看)代码如下: <!DOCTYPE HTML> <html> <head> <title ...
- 回滚Swtichover
从11.2.0.2开始,如果由于某种原因switchover没有成功,可以回滚switchover. For physical standby databases in situations wher ...