これがVBでの答えです。これはあなたの目的にはやり過ぎかもしれませんが、他の人にとっても役立つかもしれません。
まず、Nullable 型を扱っているかどうかを確認するコードを次に示します。
Private Function IsNullableType(ByVal myType As Type) As Boolean
Return (myType.IsGenericType) AndAlso (myType.GetGenericTypeDefinition() Is GetType(Nullable(Of )))
End Function
GetType の特殊な構文に注意してください。それは必要です。コメンテーターの1人が提案したように 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 がそれを詰まらせるため、最初の行で Nothing をチェックすることに注意してください...あなたはその問題を抱えていないかもしれませんが、私の状況は非常に無制限です。
うまくいけば、私があなたの質問に直接答えなかった場合、これを共食いして、必要な場所に到達できることを願っています-しかし、私はこれを少し前に実装したばかりで、私のテストはすべて合格しています.