VB (.net 8) 两个简单的函数应该返回相同的结果,但事实并非如此

问题描述 投票:0回答:1

我有一个理解上的小问题。我认为这两个简单的函数应该产生相同的结果,但实际上并没有这样做。

首先(返回预期值)

  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)。但我不明白,因为第二个函数实际上只是第一个函数的缩写形式。

我显然错过了什么?也许这里有人可以向我解释一下:)

vb.net .net-8.0
1个回答
0
投票

If
运算符必须从其操作数的类型中选择特定类型。

Nothing
很特殊,没有类型,或者更确切地说,它可以转换为每种可能的类型。另一种类型是
TimeSpan
(不是
TimeSpan?
),因此该类型被确定为
If
运算符的结果类型。

因此

Nothing
转换为 0 时间跨度,这就是结果。

© www.soinside.com 2019 - 2024. All rights reserved.