我尝试了这两个块,但它返回相同的值。我没有描述更多,我只是展示代码:
Dim f As Nullable(Of Integer)
If f = 1 Then
Console.WriteLine("Equal")
Else
Console.WriteLine("Not Equal")
End If
它提示我“不等于”
我只是添加一个NOT,我想要得到NOT答案,但我和上面一样!
Dim f As Nullable(Of Integer)
If Not f = 1 Then
Console.WriteLine("Equal")
Else
Console.WriteLine("Not Equal")
End If
它正确地在C#中工作......
答案 0 :(得分:6)
TL; DR:它根据为VB指定的行为正常工作,这与C#指定的行为不同。
比较“f = 1”在VB中产生Nullable(Of Boolean)
。将任何值与Nothing进行比较的结果是Nothing,并且Nothing和“Not Nothing”都不是“True”,因此您将始终以Else子句结束。
有关详细信息,请参阅MSDN page for nullable value types in VB。特别是,如果你寻找“比较可空类型”,你会找到一个与你的情况非常相似的例子(有解释)。特别是:
当布尔变量或表达式的值为Nothing时,它既不是true也不是false。