using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using SystemEnum = System.Enum;
namespace HxEnum
{
public static class EnumManagement
{
#region 获取枚举描述
///
/// 获取枚举描述
///
/// 枚举值
/// 返回枚举描述
public static string GetEnumDescription(object enumSubitem)
{
enumSubitem = (System.Enum)enumSubitem;
string strValue = enumSubitem.ToString();
FieldInfo fieldinfo = enumSubitem.GetType().GetField(strValue);
if (fieldinfo != null)
{
Object[] objs = fieldinfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs == null || objs.Length == 0)
{
return strValue;
}
else
{
DescriptionAttribute da = (DescriptionAttribute)objs[0];
return da.Description;
}
}
else
{
return "不限";
}
}
#endregion
#region 根据枚举的int值获取枚举值的详细说明
///
/// 根据枚举的int值获取枚举值的详细说明
///
/// 枚举类型
/// 枚举的Int值
/// 枚举值说明
public static string GetFieldTextByValue(int currentValue)
{
T currentType = GetField(currentValue);
//return GetFieldText(currentType);
return GetEnumDescription(currentType);
}
///
/// 根据枚举的int值类型转换为枚举类型
///
/// 枚举类型
/// 枚举的int值
/// 枚举类型
public static T GetField(int currentValue)
{
return (T)SystemEnum.Parse(typeof(T), currentValue.ToString());
}
///
/// 获取枚举值的说明
///
/// 枚举类型
/// 枚举类型值
/// 枚举值说明
public static string GetFieldText(T enumType)
{
Type currentType = enumType.GetType();
//获取字段信息
FieldInfo[] fields = currentType.GetFields();
if (fields == null || fields.Length < 1)
{
return enumType.ToString();
}
for (int i = 0; i < fields.Length; i++)
{
FieldInfo field = fields[i];
//判断名称是否相等
if (field.Name != enumType.ToString())
{
continue;
}
//反射自定义属性
object[] attributes = field.GetCustomAttributes(
typeof(DescriptionAttribute), false);
foreach (Attribute attribute in attributes)
{
//类型转换找到一个Description,用Description作为成员名称
DescriptionAttribute currentAttribute =
attribute as DescriptionAttribute;
if (currentAttribute != null)
{
return currentAttribute.Description;
}
}
}
//如果没有检测到合适的注释,则用默认名称
return enumType.ToString();
}
#endregion
#region 获取枚举值int
///
/// 获取枚举值int
///
/// 枚举值
/// 返回枚举值
public static int GetEnumValue(object enumSubitem)
{
return (int)enumSubitem;
}
#endregion
#region 获取枚举所有值,变成字典
///
/// 获取枚举所有值,变成字典(键:字母,值:中文)
///
/// 枚举对象
///
public static Dictionary EnumToDictionaryKey()
{
Dictionary dic = new Dictionary();
if (!typeof(T).IsEnum)
{
return dic;
}
string desc = string.Empty;
foreach (var item in Enum.GetValues(typeof(T)))
{
var attrs = item.GetType().GetField(item.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
if (attrs != null && attrs.Length > 0)
{
DescriptionAttribute descAttr = attrs[0] as DescriptionAttribute;
desc = descAttr.Description;
}
dic.Add(item.ToString(), desc);
}
return dic;
}
///
/// 获取枚举所有值,变成字典(键:数字,值:中文)
///
/// 枚举对象
///
public static Dictionary EnumToDictionaryValue()
{
Dictionary dic = new Dictionary();
if (!typeof(T).IsEnum)
{
return dic;
}
string desc = string.Empty;
foreach (var item in Enum.GetValues(typeof(T)))
{
var attrs = item.GetType().GetField(item.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
if (attrs != null && attrs.Length > 0)
{
DescriptionAttribute descAttr = attrs[0] as DescriptionAttribute;
desc = descAttr.Description;
}
dic.Add(GetEnumValue(item).ToString(), desc);
}
return dic;
}
///
/// 字符串转Enum
///
/// 枚举
/// 字符串
/// 转换的枚举
public static T ToEnum(this string str)
{
return (T)Enum.Parse(typeof(T), str);
}
///
/// 获取所有枚举
///
///
///
public static List