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

Tags: [ VB ] [ 備忘録 ] Published: 2011/12/25

あらすじ

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

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

参考サイト

検証

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

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

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

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

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

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

blog comments powered by Disqus

Author: kk_Ataka / Powered by Jekyll on GitHub Pages