Example #1
0
        /// <summary>
        /// Converts the given value object to the destination type.
        /// </summary>
        public override object?ConvertTo(ITypeDescriptorContext?context, CultureInfo?culture, object?value, Type destinationType)
        {
            ArgumentNullException.ThrowIfNull(destinationType);

            if (destinationType == UnderlyingType && value != null && NullableType.IsInstanceOfType(value))
            {
                return(value);
            }
            else if (destinationType == typeof(InstanceDescriptor))
            {
                ConstructorInfo ci = (ConstructorInfo)NullableType.GetMemberWithSameMetadataDefinitionAs(s_nullableConstructor);
                Debug.Assert(ci != null, "Couldn't find constructor");
                return(new InstanceDescriptor(ci, new object?[] { value }, true));
            }
            else if (value == null)
            {
                // Handle our own nulls here
                if (destinationType == typeof(string))
                {
                    return(string.Empty);
                }
            }
            else if (UnderlyingTypeConverter != null)
            {
                return(UnderlyingTypeConverter.ConvertTo(context, culture, value, destinationType));
            }

            return(base.ConvertTo(context, culture, value, destinationType));
        }