Вот ваш ответ в VB. Это может быть излишним для ваших целей, но также может быть полезно для некоторых других людей.
Прежде всего, вот код, чтобы выяснить, имеете ли вы дело с типом Nullable:
Private Function IsNullableType(ByVal myType As Type) As Boolean
Return (myType.IsGenericType) AndAlso (myType.GetGenericTypeDefinition() Is GetType(Nullable(Of )))
End Function
Обратите внимание на необычный синтаксис в GetType. Необходимо. Просто выполнение GetType (Nullable), как предложил один из комментаторов, не сработало для меня.
Итак, вооружившись этим, вы можете сделать что-то вроде этого ... Здесь, в инструменте ORM, я пытаюсь преобразовать значения в общий тип, который может быть или не иметь значение Nullable:
If (Not value Is Nothing) AndAlso IsNullableType(GetType(T)) Then
Dim UnderlyingType As Type = Nullable.GetUnderlyingType(GetType(T))
Me.InnerValue = Convert.ChangeType(value, UnderlyingType)
Else
Me.InnerValue = value
End If
Обратите внимание, что я проверяю Ничто в первой строке, потому что Convert.ChangeType захлебнется ... Возможно, у вас нет этой проблемы, но моя ситуация чрезвычайно открыта.
Надеюсь, если я не отвечу на ваш вопрос напрямую, вы можете отнять это и получить то, что вам нужно - но я только что реализовал это несколько минут назад, и мои тесты все проходят.