1

これらの2つのブロックを試しましたが、同じ値が返されます。これ以上は説明しません。単にコードを表示するだけです。

    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も「NotNothing」も「True」ではないため、常にElse句になります。

詳細については、VBのnull許容値タイプについてMSDNページを参照してください。特に、「Nullable型の比較」を探すと、状況に非常によく似た例(説明付き)が見つかります。特に:

ブール変数または式の値がNothingの場合、trueでもfalseでもありません。

于 2012-05-12T14:08:26.583 に答える