1

我已经尝试过这两个块,但它返回相同的值。我不再赘述,我只是展示代码:

    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# 中正确工作...

4

1 回答 1

6

TL;DR:它根据为 VB 指定的行为正常工作,这与为 C# 指定的行为不同。

比较“f = 1”Nullable(Of Boolean)在 VB 中产生 a。将任何值与 Nothing 进行比较的结果是 Nothing,Nothing 和“Not Nothing”都不是“True”,所以你总是会在 Else 子句中结束。

有关更多详细信息,请参阅MSDN 页面以了解 VB 中的可为空值类型。特别是,如果您查找“比较可空类型”,您会发现一个与您的情况非常相似的示例(带有解释)。尤其:

当布尔变量或表达式的值为 Nothing 时,它既不是真也不是假。

于 2012-05-12T14:08:26.583 回答