初投稿はこちら。これを別の場所に投稿する必要がある場合は、お気軽にお知らせください。:)
「文字列比較」と「文字列不等式」のバリエーションをグーグルで検索しましたが、それらの結果は役に立ちません。私の問題は、文字列の不等式をチェックしていて、一方が 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 でない場合、大文字と小文字の区別を含め、まったく同じであれば同じです。
したがって、私の目的では、「期待される」ものと、デモ コードで実際に起こることとが一致するもので十分です。