/// <summary> /// Returns true if the type being operated on can be /// implicitly upcast to the target type /// </summary> /// <param name="src"></param> /// <param name="target"></param> /// <returns></returns> public static bool CanImplicitlyCastTo( this Type src, Type target ) { var convertSpecific = TryConvertGeneric.MakeGenericMethod(target); if (!src.IsValueType() || !target.IsValueType()) { // fixme: what about implicit operators? return(false); } var defaultSpecific = DefaultValueGeneric.MakeGenericMethod(src); var defaultValue = defaultSpecific.Invoke(null, null); bool canConvert; try { convertSpecific.Invoke(null, new[] { defaultValue }); canConvert = true; } catch { canConvert = false; } return(canConvert); }
/// <summary> /// Returns true if the type being operated on can be /// implicitly upcast to the target type /// </summary> /// <param name="src"></param> /// <param name="target"></param> /// <returns></returns> public static bool CanImplicitlyUpcastTo( this Type src, Type target ) { var convertSpecific = TryConvertGeneric.MakeGenericMethod(target); var defaultSpecific = DefaultvalueGeneric.MakeGenericMethod(src); var defaultValue = defaultSpecific.Invoke(null, null); bool canConvert; try { convertSpecific.Invoke(null, new[] { defaultValue }); canConvert = true; } catch { canConvert = false; } return(canConvert); }