/// <summary> /// 对指定类型执行基本的类型转换判断,包括转换为 object 和 null 转换。 /// 基本类型转换失败时,保证 value != null,nonNullableType != null。 /// </summary> /// <param name="value">要转换的对象。</param> /// <param name="conversionType">要返回的对象的类型。</param> /// <param name="nonNullableType"><paramref name="value"/> 对应的 non-nullable-type。</param> /// <returns>如果基本类型转换成功,则为 <c>true</c>;否则为 <c>false</c>。</returns> private static bool BasicChangeType(ref object value, Type conversionType, out Type nonNullableType) { ExceptionHelper.CheckArgumentNull(conversionType, "conversionType"); if (conversionType.IsByRef) { conversionType = conversionType.GetElementType(); } // 总是可以转换为 Object。 if (conversionType == typeof(object)) { nonNullableType = null; return(true); } // value 为 null 的情况。 bool nullableCType = TypeExt.IsNullableType(conversionType, out nonNullableType); if (value == null) { if (conversionType.IsValueType && !nullableCType) { throw ExceptionHelper.CannotCastNullToValueType(); } return(true); } return(false); }