いもづる オブジェクト指向

VB.NET 文字列比較で "=" は使用しない

VB.NETの話です。次の4行目の文字列比較の結果は何でしょう?通るのは5行目?7行目?

1|    Dim str1 As String = "AAA"
2|    Dim str2 As String = "aaa"
3|
4|    If (str1 = str2) Then
5|        ' 同じ文字列です
6|    Else
7|        ' 違う文字列です
8|    End If

答えは、「まだわかりません」です。
それは、"=" での比較がプロジェクトのプロパティの設定で決定するからです。 下の画面はVB.NETのプロジェクトのプロパティ設定画面です。(クリックすると別窓で表示されます)

VB.NET プロジェクトのプロパティ

ここのOption Compareコンボボックスの設定で、次のように "=" の比較内容が変わります。

つまり、ソースコードだけでは処理の結果を確定できないということです。

おそらくここに関しては開発プロジェクト毎に規約が作られることと思います。
だから大丈夫!ですか?プロジェクト毎に、"=" はどっちだったか覚えいられるでしょうか?
他にも、ソースコード(DLLでなくて)を別プロジェクトで使用することになり、そのプロジェクトの "=" の設定が違っていたら・・・予期せぬ事態になる可能性があります。 他にも何かあるかもしれません。

そんな事、"=" での比較をしなければ、何も考える必要はありません。
"=" を使わなければプログラムと実行結果は1対1です。不確定な要素は取り除くに限ります。

 

大文字・小文字を区別する文字列比較

1|    Dim str1 As String = "AAA"
2|    Dim str2 As String = "aaa"
3|
4|    If (str1.Equals(str2)) Then
5|        ' 同じ文字列です
6|    Else
7|        ' 違う文字列です ※ここを通ります※
8|    End If

大文字・小文字を区別しない文字列比較

1|    Dim str1 As String = "AAA"
2|    Dim str2 As String = "aaa"
3|
4|    If (String.Compare(str1, str2, True) = 0) Then
5|        ' 同じ文字列です ※ここを通ります※
6|    Else
7|        ' 違う文字列です
8|    End If

 

webmaster@e-ioo.net