VB6からVB.NETにソース移行すると特定のIf文でInvalidCastException

[VB][備忘録]VB6からVB.NETにソース移行すると特定のIf文でInvalidCastException

あらすじ

VB6の時、If (value = 1)のような条件式でvalueに数値・文字どちらが入ってきてもエラーになっていなかった。[1]

しかし、VB.NETになりvalueに文字が入ってきた場合、InvalidCastExceptionが発生するようになった。どうも、VB6のときと評価の方法が変わっている模様…。

参考サイト

検証

Option Strict が Off の場合の比較は、実行時の型で比較方法が変わる。

比較対象 結果
どちらもString If (“a” = “b”) 文字列比較を行う
どちらも数値 If (1 = 3) Doubleに変換され数値比較を行う
数値とString If (1 = “1”)<br />If (1 = “a”) 文字列がDoubleに変換(※)され数値比較を行う。<br />文字列をDoubleに変換できない場合 InvalidCastException

(※)どうも、この部分がVB6のときと変わっている?

数値と文字(数値以外)の比較がダメなようなので、不本意ながらIf (value = “1”)にしてその場を凌いだが…。

なお、Nothingは比較対象が数値なら0,文字列なら”“となる。

[1] 結果は覚えていないけど、1以外は全てfalseになったような。