码迷,mamicode.com
首页 > 其他好文 > 详细

常用的工具类6-枚举类

时间:2016-06-22 01:41:40      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

public static class EnumHelper
{
/// <summary>
/// 枚举转换为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, int> EnumDictionary<T>()
{
Dictionary<string, int> dic = new Dictionary<string, int>();
if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);
foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);
dic.Add(key, val);
}
return dic;
}

/// <summary>
/// 枚举转换为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<int, string> EnumToDictionary<T>()
{
Dictionary<int, string> dic = new Dictionary<int, string>();
if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);
foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);
dic.Add(val, key);
}
return dic;
}

/// <summary>
/// 枚举的描述和Key转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, string> EnumKeyAndDescriptionToDictionary<T>()
{
Dictionary<string, string> dic = new Dictionary<string, string>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[key] = desc.Description;
}
}
}

return dic;
}

/// <summary>
/// 枚举的描述和Key转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, string> EnumDescriptionAndKeyToDictionary<T>()
{
Dictionary<string, string> dic = new Dictionary<string, string>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[desc.Description] = key;
}
}
}

return dic;
}

/// <summary>
/// 枚举的描述和Value转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<int, string> EnumValueAndDescriptionToDictionary<T>()
{
Dictionary<int, string> dic = new Dictionary<int, string>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);

FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[val] = desc.Description;
}
}
}

return dic;
}

/// <summary>
/// 枚举的描述和Value转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, int> EnumDescriptionAndValueToDictionary<T>()
{
Dictionary<string, int> dic = new Dictionary<string, int>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);

FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[desc.Description] = val;
}
}
}

return dic;
}

/// <summary>
/// 枚举描述
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public static String GetEnumDesc(Enum e)
{
FieldInfo fieldInfo = e.GetType().GetField(e.ToString());
if (fieldInfo != null)
{
DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (EnumAttributes.Length > 0)
{
return EnumAttributes[0].Description;
}
}
return e.ToString();
}
}

public class EnumView<T>
{
private static Dictionary<int, string> s_DictCodeToText = null;
private static Dictionary<string, int> s_DictTextToCode = null;

static EnumView()
{
s_DictCodeToText = EnumHelper.EnumToDictionary<T>();
s_DictTextToCode = EnumHelper.EnumDictionary<T>();
}

private EnumView() { }

public static Dictionary<int, string> DictCodeToText { get { return s_DictCodeToText; } }
public static Dictionary<string, int> DictTextToCode { get { return s_DictTextToCode; } }


public static int GetCode(string text)
{
if (s_DictTextToCode.ContainsKey(text))
{
return s_DictTextToCode[text];
}
return int.MinValue;
}

public static string GetText(int code)
{
if (s_DictCodeToText.ContainsKey(code))
{
return s_DictCodeToText[code] ?? string.Empty;
}
return string.Empty;
}
}

 

public class EnumHelperEx
{

public static T ToEnum<T>(int value, T defaultT) where T : struct
{
var enumName = Enum.GetName(typeof(T), value);

return ToEnum<T>(enumName, defaultT);
}

public static T ToEnum<T>(string enumName, T defaultT) where T : struct
{
if (string.IsNullOrWhiteSpace(enumName))
{
return defaultT;
}

T result;

if (!Enum.TryParse<T>(enumName.Trim(), out result))
{
return defaultT;
}

if (Enum.IsDefined(typeof(T), result))
{
return result;
}

return defaultT;
}

}

常用的工具类6-枚举类

标签:

原文地址:http://www.cnblogs.com/zhshlimi/p/5605535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!