私は問題を抱えています。私は構造にいくつかの一般的なルールを適用したいと思います。それらのタイプが異なるので、汎用関数を使用してこれを行いたいと思います。私の問題は、指定された型のパラメータでしか利用できないメソッドを介して構造体を操作するために、大量のキャストを行うことなくその方法を見つけることができないということです。 DateTime
値は常にUTCとして指定する必要があることを指定するために必要な手順を、例えば、以下を参照してください他の構造に汎用構造をキャストする
Public Shared Function Sanitize(Of T As Structure)(retValue As T?) As T?
' If value is DateTime it must be specified as UTC:
If GetType(T) = GetType(DateTime) AndAlso retVal.HasValue Then
' To specify the value as UTC, it must first be casted into DateTime, as it is not know to the compiler that the type in fact IS
' DateTime, even if we just checked.
Dim retValAsObj = CType(retVal, Object)
Dim retValAsObjAsDateTime = CType(retValAsObj, DateTime)
Dim retValWithSpecifiedKind = DateTime.SpecifyKind(retValAsObjAsDateTime, DateTimeKind.Utc)
retVal = CType(CType(retValWithSpecifiedKind, Object), T?)
End If
Return retVal
End Function
私は何かが足りないのですか?このような簡単な作業のために4回キャスティングすることは、私にとっては最高の/最も簡単な解決策であると思われます。
このようなコードを記述すると、電球が点灯するはずです。*これは一般的なものではありません。そのようなコードはちょっと避けられない結果をもたらし、ちょうど複雑で苦痛を与えます。 Option Strict Offを使用し、 'As Object'を先読みしている限り、vb.netのダイナミックな型指定に対する適切なサポートを利用することを検討してください。 –