in Source/NuGetGallery.Operations/Common/TypeHelper.cs [35:91]
public static object ChangeType(object value, Type type)
{
if (type == null)
{
throw new ArgumentNullException("type");
}
if (value == null)
{
if (TypeAllowsNull(type))
{
return null;
}
return Convert.ChangeType(value, type, CultureInfo.CurrentCulture);
}
type = RemoveNullableFromType(type);
if (value.GetType() == type)
{
return value;
}
TypeConverter converter = TypeDescriptor.GetConverter(type);
if (converter.CanConvertFrom(value.GetType()))
{
return converter.ConvertFrom(value);
}
converter = TypeDescriptor.GetConverter(value.GetType());
if (converter.CanConvertTo(type))
{
return converter.ConvertTo(value, type);
}
Func<TypeConverter> ctor;
if (_additionalConverters.TryGetValue(type, out ctor))
{
converter = ctor();
if (converter.CanConvertFrom(value.GetType()))
{
return converter.ConvertFrom(value);
}
}
if (_additionalConverters.TryGetValue(value.GetType(), out ctor))
{
converter = ctor();
if (converter.CanConvertTo(type))
{
return converter.ConvertTo(value, type);
}
}
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
TaskResources.UnableToConvertTypeError, value.GetType(), type));
}