2

初投稿はこちら。これを別の場所に投稿する必要がある場合は、お気軽にお知らせください。:)

「文字列比較」と「文字列不等式」のバリエーションをグーグルで検索しましたが、それらの結果は役に立ちません。私の問題は、文字列の不等式をチェックしていて、一方が null で他方がそうでない場合に驚くべき結果が得られることです。次のデモ コードを検討してください。

TestStr "foo", "foo", "="
TestStr "foo", "bar", "<>"
TestStr Null, "foo", "<>"
TestStr "foo", Null, "<>"

Sub TestStr(left, right, expected)
    ' I actually don't care about this - it's here for reference
    If left = right Then
        WScript.Echo "left = right - expected " & expected
    Else
        WScript.Echo "left <> right - expected " & expected
    End If

    If left <> right Then
        WScript.Echo "left <> right - expected " & expected
    Else
        WScript.Echo "left = right - expected " & expected
    End If
    WScript.Echo ""
End Sub

このコードを実行すると、次の出力が生成されます (「コード化」されているため、フォーマットされていません)。

left = right - expected =
left = right - expected =

left <> right - expected <>
left <> right - expected <>

left <> right - expected <>
left = right - expected <>

left <> right - expected <>
left = right - expected <>

ご覧のとおり、一方が null で他方がそうでない場合、文字列の不等式は失敗します。これは私が現在経験していることです。以下のことができることはわかっていますが、もっと簡単な方法がないかどうか疑問に思っています。

If (left = right) Then
Else
    ' Do inequality stuff here...
End If

[編集]なぜこれが起こっているのかについて素晴らしいフィードバックを得ています。ありがとう!ただし、これを回避する方法にも興味があります。

[編集 2] 私が望んでいるのは、文字列がいつ異なるかを知る簡単な方法です (提案 Ekkehard.Horner に感謝します)。

  • 両方が null の場合、それらは同じではないと主張できますが、私にとっては十分に同じです。
  • 1 つが null で、もう 1 つがそうでない場合、それらは異なります - かなり明白です。
  • 両方が null でない場合、大文字と小文字の区別を含め、まったく同じであれば同じです。

したがって、私の目的では、「期待される」ものと、デモ コードで実際に起こることとが一致するもので十分です。

4

3 に答える 3