我在 VB 中有以下代码:
Public Shared Function LoadFromSession(Of T)(sessionKey As String) As T
Try
' Note: SBSSession is simply a reference to HttpContext.Current.Session
Dim returnValue As T = DirectCast(SBSSession(sessionKey), T)
Return returnValue
Catch ex As NullReferenceException
' If this gets thrown, then the object was not found in session. Return default value ("Nothing") instead.
Dim returnValue As T = Nothing
Return returnValue
Catch ex As InvalidCastException
' Instead of throwing this exception, I would like to filter it and only
' throw it if it is a type-narrowing cast
Throw
End Try
End Function
我想做的是为任何缩小转换抛出异常。例如,如果我将 5.5 之类的十进制数保存到会话中,然后我尝试将其检索为整数,那么我想抛出 InvalidCastException。 DirectCast
这样做很好。
但是,我想允许扩大转换(例如,将像 5 这样的整数保存到会话中,然后将其作为小数检索)。 DirectCast
不允许这样做,但CType
确实如此。不幸的是,CType
它还允许缩小转换范围,这意味着在第一个示例中,它将返回值 6。
有没有办法可以实现所需的行为?也许通过使用 VB 过滤异常Catch...When
?