/// <summary> /// 返回指定类型的对象,其值等效于指定对象。参数提供区域性特定的格式设置信息。 /// 只对允许进行隐式类型转换。 /// </summary> /// <param name="value">要转换的对象。</param> /// <param name="conversionType">要返回的对象的类型。</param> /// <param name="provider">一个提供区域性特定的格式设置信息的对象。</param> /// <returns>一个对象,其类型为 <paramref name="conversionType"/>, /// 并且其值等效于 <paramref name="value"/>。</returns> internal static object ImplicitChangeType(object value, Type conversionType, IFormatProvider provider) { Type nonNullableType; if (BasicChangeType(ref value, conversionType, out nonNullableType)) { return value; } Type type = value.GetType(); // 尝试标准隐式类型转换。 bool success; object result = StandardImplicitChangeType(value, type, nonNullableType, provider, out success); if (success) { return result; } // 对隐式类型转换运算符进行判断。 ConversionMethod method = ConversionCache.GetImplicitConversion(type, conversionType); if (method != null) { value = MethodInfo.GetMethodFromHandle(method.Method).Invoke(null, new object[] { value }); if (value != null) { type = value.GetType(); if (type != nonNullableType) { // 处理用户定义隐式类型转换之后的标准隐式类型转换。 value = StandardImplicitChangeType(value, type, nonNullableType, provider, out success); } } return value; } throw CommonExceptions.ConvertInvalidValue(value, conversionType); }