/// <summary> /// Use this method instead of Convert.ChangeType. Makes Convert.ChangeType work with Nullable types. /// </summary> /// <param name="value"></param> /// <param name="type"></param> /// <param name="provider"></param> /// <returns></returns> public static object ChangeType(object value, Type type, IFormatProvider provider) { var underlyingType = Nullable.GetUnderlyingType(type); if (!(underlyingType != null)) { return(TypeConverterHelper.ChangeType(value, type, provider)); } if (value is string && underlyingType != typeof(string) && ValueConvert.IsEmpty((string)value)) { return(null); } value = ChangeType(value, underlyingType, provider); if (value is DBNull) { return(null); } return(value); }
/// <summary> /// Use this method instead of Convert.ChangeType. Makes Convert.ChangeType work with Nullable types. /// </summary> /// <param name="value"></param> /// <param name="type"></param> /// <returns></returns> public static object ChangeType(object value, Type type) { var underlyingType = Nullable.GetUnderlyingType(type); if (underlyingType != null) { if (value is string && underlyingType != typeof(string) && ValueConvert.IsEmpty((string)value)) { return(null); } value = ChangeType(value, underlyingType); if (value is DBNull) { return(null); } return(value); } if (!type.GetTypeInfo().IsInterface) { return(TypeConverterHelper.ChangeType(value, type)); } return(value); }