public class EnumHelper
{
public static T GetEnumByDescription<T>(string description)
{
if (!string.IsNullOrEmpty(description))
{
Type enumType = typeof(T);
EnumItemCollection enumItems = GetEnumItems(enumType);
foreach (EnumItem item in enumItems)
{
if (item.Description.ToString().ToLower() == description.Trim().ToLower()) return (T) Enum.ToObject(typeof(T), item.Value);
}
}
return default(T);
}
public static T GetEnumByKey<T>(string key)
{
return GetEnumByKey<T>(key, default(T));
}
public static T GetEnumByKey<T>(string key, T defaultValue)
{
T local = defaultValue;
EnumItem enumItem = null;
try
{
Type enumType = typeof(T);
EnumItemsCache.Get(enumType).TryGet(key, out enumItem);
if (enumItem != null) local = (T) Enum.ToObject(enumType, enumItem.Value);
}
catch
{
local = defaultValue;
}
return local;
}
public static T GetEnumByValue<T>(int value)
{
return GetEnumByValue<T>(value, default(T));
}
public static T GetEnumByValue<T>(string value)
{
return GetEnumByValue<T>(value, default(T));
}
public static T GetEnumByValue<T>(int value, T defaultValue)
{
T local = defaultValue;
try
{
EnumItemCollection enumItems = GetEnumItems(typeof(T));
foreach (EnumItem item in enumItems)
{
if (item.Value == value) local = (T) Enum.ToObject(typeof(T), item.Value);
}
}
catch
{
local = defaultValue;
}
return local;
}
public static T GetEnumByValue<T>(string value, T defaultValue)
{
T local = defaultValue;
try
{
EnumItemCollection enumItems = GetEnumItems(typeof(T));
foreach (EnumItem item in enumItems)
{
if (item.Value.ToString() == value) local = (T) Enum.ToObject(typeof(T), item.Value);
}
}
catch
{
local = defaultValue;
}
return local;
}
public static string GetEnumDescription(Enum enumField)
{
return GetEnumItem(enumField).Description;
}
public static EnumItem GetEnumItem<T>(T enumField)
{
return GetEnumItems(typeof(T))[enumField.ToString()];
}
public static EnumItem GetEnumItem(Enum enumField)
{
return GetEnumItems(enumField.GetType())[enumField.ToString()];
}
public static EnumItemCollection GetEnumItems(Type enumType)
{
return EnumItemsCache.Get(enumType);
}
public static T GetEnumObject<T>(string text)
{
return (T) Enum.Parse(typeof(T), text, true);
}
}