Vb.net 具有类型转换的ByRef参数
我确实创建了一个XDateTime类,它能够处理不准确的日期和时间 该类具有在字符串之间进行转换所需的所有CType运算符,并且在过去几个月内对其进行了全面测试Vb.net 具有类型转换的ByRef参数,vb.net,type-conversion,Vb.net,Type Conversion,我确实创建了一个XDateTime类,它能够处理不准确的日期和时间 该类具有在字符串之间进行转换所需的所有CType运算符,并且在过去几个月内对其进行了全面测试 Public Shared Widening Operator CType(ByVal xDateTime As FrameworkBL.XDateTime) As String Dim retrunValue As String = Nothing If xDateTime Is Nothing Then
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对象参数返回字符串时,my 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
这种问题很严重,但我找不到解决这个问题的有效方法。我是否处于死胡同,或者是否有一个选项允许我保留ByRef对象参数???解决方案是不编写此代码。事实上,您的代码甚至不应该编译,更不用说
ByRef
。您无法将字符串分配给对象
,这是正确的。您应该在项目设置中启用选项Strict On
这是正确和预期的行为
除此之外,通过利用VBIf
操作符,您的操作符实现可以(也应该)大大缩短。这将消除冗余初始化和分配:
Public Shared Widening Operator CType(ByVal xDateTime As XDateTime) As String
Return If(xDateTime Is Nothing, Nothing, xDateTime.StringValue)
End Operator
反过来也一样。也就是说,我不认为转换运算符应该处理Nothing
值。这只会让什么都不做
潜入不该潜入的代码中