VB.NETでは、通常は参照型の空参照として扱われるNothingとの比較は「Is Nothing」や「IsNot Nothing」で行う*1。しかし、対象が値型変数の場合、通常のイコールやノットイコール(=や<>)で比較が出来る。これ、案外知らない人が多い。
ではこのときに何が起きるのか。以下のコードを試しに実行してみてほしい。
Dim test As Integer = 0 If test = Nothing Then MessageBox.Show("nothing") Else MessageBox.Show("not nothing") End If
Integer型で宣言した変数testにはゼロを設定する。その後、testがNothingかどうかをイコールで判断すると……Nothingと判定される。このように、値型をNothingと比較した場合、その型の「初期値」かどうかという判定になる。その代わり、相手が値型の場合には比較に「Is」や「IsNot」は使えない。
この仕様、なんとかならんもんかなぁ。余計な機能だと思う。混乱を来すし、いちいち「どうだったっけ?」って思い出すだけ時間の無駄。
*1:IsNotはVisual Basic 8.0、.NET Framework 2.0に対応したVB.NETから使えるようになった演算子。それ以前はNot ~ Is ~ と書くしか無かった。