Example #1
0
        /// <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);
        }