我有一个理解上的小问题。我认为这两个简单的函数应该产生相同的结果,但实际上并没有这样做。
首先(返回预期值)
Public Shared Function TSN(value As Object) As TimeSpan?
If IsDBNull(value) OrElse IsNothing(value) Then
Return Nothing
Else
Return DirectCast(value, TimeSpan)
End If
End Function
第二(我认为这很奇怪)
Public Shared Function TSN(value As Object) As TimeSpan?
Return If(IsDBNull(value) OrElse IsNothing(value), Nothing, DirectCast(value, TimeSpan))
End Function
给定值来自 SQL 查询。如果它的值是 DBNull 或 Nothing,则函数都应返回 Nothing。第一个返回 New Timespan(0,0,0),第二个返回 New Timespan(0,0,0)。但我不明白,因为第二个函数实际上只是第一个函数的缩写形式。
我显然错过了什么?也许这里有人可以向我解释一下:)
If
运算符必须从其操作数的类型中选择特定类型。
Nothing
很特殊,没有类型,或者更确切地说,它可以转换为每种可能的类型。另一种类型是 TimeSpan
(不是 TimeSpan?
),因此该类型被确定为 If
运算符的结果类型。
因此
Nothing
转换为 0 时间跨度,这就是结果。