using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.ComponentModel;
using System.Collections;
using System.Collections.Specialized;
namespace JianKunKing.Common.EnumClass
{
///
/// 枚举操作类
///
public static class EnumOperation
{
#region 从枚举中获取Description
///
/// 从枚举中获取Description
///
/// 需要获取枚举描述的枚举
/// 描述内容
public static string GetDescription(Enum enumName)
{
try
{
string _description = string.Empty;
FieldInfo _fieldInfo = enumName.GetType().GetField(enumName.ToString());
DescriptionAttribute[] _attributes = GetDescriptAttr(_fieldInfo);
if (_attributes != null && _attributes.Length > 0)
{
_description = _attributes[0].Description;
}
else
{
_description = enumName.ToString();
}
return _description;
}
catch (Exception)
{
throw;
}
}
#endregion
#region 获取字段Description(private)
///
/// 获取字段Description
///
/// FieldInfo
/// DescriptionAttribute[]
private static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo)
{
try
{
if (fieldInfo != null)
{
return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
}
return null;
}
catch (Exception)
{
throw;
}
}
#endregion
#region 根据Description获取枚举定义字符串
///
/// 根据Description获取枚举定义字符串
///
/// 枚举类型
/// 枚举描述
/// 枚举
public static T GetEnumName(string description)
{
Type _type = typeof(T);
foreach (FieldInfo field in _type.GetFields())
{
DescriptionAttribute[] _curDesc = field.GetDescriptAttr();
if (_curDesc != null && _curDesc.Length > 0)
{
if (_curDesc[0].Description == description)
{
return (T)field.GetValue(null);
}
}
else
{
if (field.Name == description)
{
return (T)field.GetValue(null);
}
}
}
throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", description), "Description");
}
#endregion
#region 将枚举转换为ArrayList
///
/// 将枚举转换为ArrayList
/// 说明:
/// 若不是枚举类型,则返回NULL
///
/// 枚举类型
/// ArrayList
public static ArrayList ToArrayList(Type type)
{
try
{
if (type.IsEnum)
{
ArrayList _array = new ArrayList();
Array _enumValues = Enum.GetValues(type);
foreach (Enum value in _enumValues)
{
_array.Add(new KeyValuePair(value, GetDescription(value)));
}
return _array;
}
return null;
}
catch (Exception)
{
throw;
}
}
#endregion
#region 根据枚举值得到属性Description中的描述, 如果没有定义此属性则返回空串
///
/// 根据枚举值得到属性Description中的描述, 如果没有定义此属性则返回空串
///
///
///
///
public static String GetEnumDescriptionString(int value, Type enumType)
{
try
{
NameValueCollection nvc = GetNVCFromEnumValue(enumType);
return nvc[value.ToString()];
}
catch (Exception)
{
throw;
}
}
#endregion
#region 根据枚举类型得到其所有的值 与 枚举定义Description属性 的集合
///
/// 根据枚举类型得到其所有的 值 与 枚举定义Description属性 的集合
///
///
///
public static NameValueCollection GetNVCFromEnumValue(Type enumType)
{
try
{
NameValueCollection nvc = new NameValueCollection();
Type typeDescription = typeof(DescriptionAttribute);
System.Reflection.FieldInfo[] fields = enumType.GetFields();
string strText = string.Empty;
string strValue = string.Empty;
foreach (FieldInfo field in fields)
{
if (field.FieldType.IsEnum)
{
strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
object[] arr = field.GetCustomAttributes(typeDescription, true);
if (arr.Length > 0)
{
DescriptionAttribute aa = (DescriptionAttribute)arr[0];
strText = aa.Description;
}
else
{
strText = "";
}
nvc.Add(strValue, strText);
}
}
return nvc;
}
catch (Exception)
{
throw;
}
}
#endregion
#region 根据枚举值得到相应的枚举定义字符串
///
///根据枚举值得到相应的枚举定义字符串
///
///
///
///
public static String GetEnumString(int value, Type enumType)
{
try
{
NameValueCollection nvc = GetEnumStringFromEnumValue(enumType);
return nvc[value.ToString()];
}
catch (Exception)
{
throw;
}
}
#endregion
#region 根据枚举类型得到其所有的 值 与 枚举定义字符串 的集合
///
/// 根据枚举类型得到其所有的 值 与 枚举定义字符串 的集合
///
///
///
public static NameValueCollection GetEnumStringFromEnumValue(Type enumType)
{
try
{
NameValueCollection nvc = new NameValueCollection();
Type typeDescription = typeof(DescriptionAttribute);
System.Reflection.FieldInfo[] fields = enumType.GetFields();
string strText = string.Empty;
string strValue = string.Empty;
foreach (FieldInfo field in fields)
{
if (field.FieldType.IsEnum)
{
strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
nvc.Add(strValue, field.Name);
}
}
return nvc;
}
catch (Exception)
{
throw;
}
}
#endregion
}
}
如果知道枚举的编号就是那个int类型的数字,获取name直接强转就可以 (枚举类型)(int值)
小注: 对于基础公共方法类来说,其中最好不是获取异常直接抛出,切记不要吞掉或者只抛出部分信息。
异常部分可以参考:点击打开链接
本人参考:http://blog.csdn.net/yenange/article/details/7788332