public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
- if (sourceType == typeof (string))
- return true;
- return base.CanConvertFrom (context, sourceType);
+ return sourceType == typeof (string) || base.CanConvertFrom (context, sourceType);
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type t)
{
- if (t == typeof (string))
- return true;
-
- return base.CanConvertTo (context, t);
+ return t.IsPrimitive || base.CanConvertTo (context, t);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
if (culture == null)
culture = CultureInfo.CurrentCulture;
- if (destinationType == typeof (string) && value.GetType () == InnerType) {
- NumberFormatInfo numberFormatInfo = (NumberFormatInfo) culture.GetFormat (typeof (NumberFormatInfo));
- return ConvertToString (value, numberFormatInfo);
- }
+ if (destinationType == typeof (string) && value is IConvertible)
+ return ((IConvertible) value).ToType (destinationType, culture);
+
+ if (destinationType.IsPrimitive)
+ return Convert.ChangeType (value, destinationType, culture);
return base.ConvertTo (context, culture, value, destinationType);
}