不正確な日付と時刻を処理できるXDateTimeクラスを作成しました。ByRefパラメータの型変換
このクラスには、文字列との変換に必要なすべてのCType演算子があり、最後の数か月は完全にテストされています。
Public Shared Widening Operator CType(ByVal xDateTime As FrameworkBL.XDateTime) As String
Dim retrunValue As String = Nothing
If xDateTime Is Nothing Then
retrunValue = Nothing
Else
retrunValue = xDateTime.StringValue
End If
Return retrunValue
End Operator
Public Shared Narrowing Operator CType(ByVal value As String) As FrameworkBL.XDateTime
Dim returnValue As FrameworkBL.XDateTime = Nothing
If String.IsNullOrEmpty(value) Then
returnValue = Nothing
Else
returnValue = New FrameworkBL.XDateTime(value)
End If
Return returnValue
End Operator
ただし、ByRefオブジェクトのパラメータが文字列を返すと、CType演算子は無視され、キャストExceptionが発生します。
Private Sub Test()
Dim myXDateTime As FrameworkBL.XDateTime
myXDateTime = "200101010000007" 'Ok
Me.Temp1(myXDateTime) 'Ok
Me.Temp2(myXDateTime) 'Ok
Me.Temp3(myXDateTime) 'Unable to cast object of type 'System.String' to type 'FrameworkBL.XDateTime'
End Sub
Private Sub Temp1(ByRef myObject As String)
myObject = "200201010000007"
End Sub
Private Sub Temp2(ByRef myObject As XDateTime)
myObject = "200301010000007"
End Sub
Private Sub Temp3(ByRef myObject As Object)
myObject = "200401010000007"
End Sub
この種の問題はdocumented by Microsoftですが、私はこの問題を解決するために取り組んで解決策を見つけることができませんでした。私は枯れてしまったのですか、私のByRefオブジェクトのパラメータを保持できるオプションがありますか?