话不多说,还是直接看以下代码:主要由:
public class CommonHandler
{
/// <summary>
/// 根据枚举值来获取描述信息
/// </summary>
/// <param name="e">枚举值</param>
/// <returns></returns>
public static string GetEnumDesc(Enum e)
{
DescriptionAttribute[] descAttribute = (DescriptionAttribute[])e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false);
return descAttribute == null || descAttribute.Length == 0 ? string.Empty : descAttribute[0].Description;
}
/// <summary>
/// 根据枚举类型来获取枚举值和枚举描述信息
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<int, string> GetValueAndDesc<T>()
{
Dictionary<int, string> dic = new Dictionary<int, string>();
try
{
foreach (FieldInfo item in typeof(T).GetFields())
{
if (item.FieldType.IsEnum)
{
int key = (int)typeof(T).InvokeMember(item.Name, BindingFlags.GetField, null, null, null);
DescriptionAttribute[] descs = (DescriptionAttribute[])item.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (descs.Length > 0 && !dic.ContainsKey(key))
{
dic.Add(key, descs[0].Description);
}
}
}
}
catch (Exception)
{
// throw;
}
return dic;
}
//泛型方法,返回的是枚举中的Description()中的描述值和枚举实际值(int)
public static Dictionary<string, int> GetValueAndDesc_Key<T>()类型{
Dictionary<string, int> dic = new Dictionary<string, int>();
try
{
foreach (FieldInfo item in typeof(T).GetFields())
{
if (item.FieldType.IsEnum)
{
int key = (int)typeof(T).InvokeMember(item.Name, BindingFlags.GetField, null, null, null);
DescriptionAttribute[] descs = (DescriptionAttribute[])item.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (descs.Length > 0 && !dic.ContainsKey((string)descs[0].Description))
{
dic.Add( descs[0].Description,key);
}
}
}
}
catch (Exception)
{
// throw;
}
return dic;
}
public static int GetEnumValueByDesc<T>(string desc)
{
if (string.IsNullOrEmpty(desc))
{
throw new Exception("传入的参数desc为空");
}
Dictionary<string, int> dicAll = GetValueAndDesc_Key<T>();
if (dicAll!=null&&dicAll.Count>0)
{
foreach (string item in dicAll.Keys)
{
if (string.Compare(item,desc,false)==0)
{
return dicAll[item];
break;
}
}
}
return int.MaxValue;
}
}
}
以上的代码全部经过测试。