public static void Main()
var data=oj.ConvertToType<int>(false);
public static T ConvertToType<T>(this object obj, bool useDefaultValue = false)
return OnConvertToType<T>(obj, type);
return OnConvertToType<T>(obj, type);
private static T OnConvertToType<T>(object obj, Type type)
return (T)Convert.ChangeType(obj, type);
Type underlyingType = Nullable.GetUnderlyingType(type);
if (underlyingType != null)
return (T)Convert.ChangeType(obj, Nullable.GetUnderlyingType(type));
if (type.IsGenericType || type.IsInterface)
var objType = obj.GetType();
if (objType == typeof(string) && Enum.IsDefined(type, obj))
return (T)Enum.Parse(type, obj.ToString());
else if (int.TryParse(obj.ToString(), out i) && Enum.IsDefined(type, i))
return (T)Enum.Parse(type, i.ToString());
throw new Exception(string.Format("Enum :{0} {1} 無法轉換 ", (type.Name), (obj)));
return (T)Convert.ChangeType(obj, type);
private static bool HasValidValue(object obj)
return (obj != null && !DBNull.Value.Equals(obj));