/// <summary> /// Converts the given value object to the destination type. /// </summary> public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { if (destinationType == null) { throw new ArgumentNullException(nameof(destinationType)); } if (destinationType == UnderlyingType && value != null && NullableType.IsInstanceOfType(value)) { return(value); } else if (destinationType == typeof(InstanceDescriptor)) { ConstructorInfo ci = NullableType.GetConstructor(new Type[] { UnderlyingType }); 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)); }
private ConstructorInfo GetNullableConstructor() { return(NullableType.GetConstructor(new Type[] { UnderlyingType }) !); }