Я создал класс XDateTime, который может обрабатывать неточные дату и время.
В этом классе есть все операторы 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, похоже, игнорируются и возникает исключение приведения.
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
Проблема такого рода задокументировано Microsoft , но я не смог найти работающего решения для решения этой проблемы.Я в тупике или есть опция, которая позволила бы мне сохранить мой параметр ByRef Object ??