/// <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);
        }