/// <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)); }