public static T ParseEnum<T>(object oValue, T defaultValue)
{
if (oValue == null) return defaultValue;
if (oValue.Equals('\0')) return (T)Convert.ChangeType(0, typeof(T));
if (oValue is T) return (T)oValue;
var sValue = oValue.ToString();
if (string.IsNullOrEmpty(sValue))
return defaultValue;
try
{
var o = Enum.Parse(typeof(T), sValue);
if (o == null)
return defaultValue;
return (T)o;
}
catch (Exception error)
{
return defaultValue;
}
}