[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になったような。