public static bool CanConvertType(Type initialType, Type targetType, bool allowTypeNameToString) { ValidationUtils.ArgumentNotNull(initialType, "initialType"); ValidationUtils.ArgumentNotNull(targetType, "targetType"); if (ReflectionUtils.IsNullableType(targetType)) { targetType = Nullable.GetUnderlyingType(targetType); } if (targetType == initialType) { return(true); } if (typeof(IConvertible).IsAssignableFrom(initialType) && typeof(IConvertible).IsAssignableFrom(targetType)) { return(true); } if (initialType == typeof(DateTime) && targetType == typeof(DateTimeOffset)) { return(true); } if (initialType == typeof(Guid) && (targetType == typeof(Guid) || targetType == typeof(string))) { return(true); } if (initialType == typeof(Type) && targetType == typeof(string)) { return(true); } TypeConverter converter = ConvertUtils.GetConverter(initialType); if (converter != null && !ConvertUtils.IsComponentConverter(converter) && converter.CanConvertTo(targetType) && (allowTypeNameToString || converter.GetType() != typeof(TypeConverter))) { return(true); } TypeConverter typeConverter = ConvertUtils.GetConverter(targetType); if (typeConverter != null && !ConvertUtils.IsComponentConverter(typeConverter) && typeConverter.CanConvertFrom(initialType)) { return(true); } if (initialType == typeof(DBNull) && ReflectionUtils.IsNullable(targetType)) { return(true); } return(false); }