VB.NET奇怪的IF语句行为,总是别的

pyl*_*ver 1 .net c# vb.net clr nullable

我试过这两个块,但它返回相同的值.我没有描述更多,我只是展示代码:

    Dim f As Nullable(Of Integer)
    If f = 1 Then
        Console.WriteLine("Equal")
    Else
        Console.WriteLine("Not Equal")
    End If
Run Code Online (Sandbox Code Playgroud)

它提示我"不等于"

我只是添加了一个NOT,我想要得到NOT答案,但我和上面一样!

    Dim f As Nullable(Of Integer)
    If Not f = 1 Then
        Console.WriteLine("Equal")
    Else
        Console.WriteLine("Not Equal")
    End If
Run Code Online (Sandbox Code Playgroud)

它正确地在C#中工作......

Jon*_*eet 6

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

比较"f = 1" Nullable(Of Boolean)在VB中产生a .将任何值与Nothing进行比较的结果是Nothing,并且Nothing和"Not Nothing"都不是"True",因此您将始终以Else子句结束.

有关更多详细信息,请参阅MSDN页面以获取VB中可为空的值类型.特别是,如果你寻找"比较可空类型",你会找到一个与你的情况非常相似的例子(有解释).特别是:

当布尔变量或表达式的值为Nothing时,它既不是true也不是false.