public static object ChangeType()

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