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,ip
[Description("這是第三個枚舉值的描述MyTestC")]
MyC = 2
}ci
/// <summary>
/// 用於保存枚舉值Name,Value,Description的類
/// </summary>
public class EnumModel
{
public string Description { get; set; }
public string Name { get; set; }
public int Value { get; set; }
}get
/// <summary>
/// MethodOne獲取枚舉的Name,Value,Description
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public List<EnumModel> MethodOne_GetEnumModel<T>()
{
List<EnumModel> listEnumModel = new List<EnumModel>();string
#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();it
DescriptionAttribute[] enumAttributeList = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (enumAttributeList != null && enumAttributeList.Length > 0)
{
enumModel.Description = enumAttributeList[0].Description;
}
else
{
enumModel.Description = fieldInfo.Name;
}io
/*
* 下面的方法也能夠得到枚舉的描述
dynamic dy = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (dy != null && dy.Length>0)
{
enumModel.Description = dy[0].Description;
}
else
{
enumModel.Description = fieldInfo.Name;
}
*/class
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;
}
}