这是您在 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
请注意,我在第一行检查 Nothing 因为 Convert.ChangeType 会阻塞它......你可能没有这个问题,但我的情况非常开放。
希望如果我没有直接回答您的问题,您可以蚕食它并让您到达您需要去的地方 - 但我刚刚实现了这个,我的测试都通过了。