比较整数和整数?结果是布尔值?不是布尔值

ili*_*ian 4 .net vb.net compiler-construction

我只是编写一些代码来比较整数的id和整数的id?例如:

Dim id As Integer = 1
Dim nullId As Integer? = Nothing
Dim areEqual As Boolean
areEqual = nullId = id
Run Code Online (Sandbox Code Playgroud)

当我尝试编译代码时,我收到编译器错误:

Option Strict On disallows implicit conversions from 'Boolean?' to 'Boolean'.
Run Code Online (Sandbox Code Playgroud)

虽然我很容易解决这个问题,但我希望有人能够解释编译器中发生的事情以发出此警告.

Rog*_*mbe 7

这是可空类型的怪癖之一.NULL(一般而言)表示"不知道".比较知名不知名的结果未知(因为你不知道它们是相同的).

它与.NET中的可空类型相同.比较一个Integer?Integer在结果Boolean?,因为你可能会得到True,False或"不知道".