ユーザー入力を処理する際には、ユーザーがTextBoxに数値以外のものを入力した場合に型変換エラーを防ぐことが非常に重要です。これはアプリケーションの安定性を確保するために不可欠です。
質問の背景:
VB6およびVB.NETでは、型変換エラー(例えば、CIntやValを使用した場合)はクラッシュを引き起こすことがありました。その後、Integer.TryParseのようなより安全な手段が登場しました。
問題:
無効なデータ(文字、特殊文字、空の文字列)を変換しようとすると、標準的な方法(CInt, CDbl)は例外をスローします。その結果、アプリケーションがクラッシュする可能性があります。
解決策:
安全に変換するにはTryParseを使用します。これは文字列を数値に変換する操作の成功を論理値で返し、例外を防ぎます。
コードの例:
Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"入力された数値: {number}") Else MessageBox.Show("エラー: 数値ではありません") End If
主な特徴:
TryParseは失敗した場合に例外をスローしませんVal("123abc") は何を返し、なぜそれが危険か?
Val("123abc")は123を返し、数字の後の非数字文字を無視します。これにより、ユーザーが誤って余分な文字を入力した場合にエラーが発生する可能性があります。
CInt("") で空の文字列を変換できますか?
いいえ、その関数はInvalidCastExceptionをスローします。
ローカライズを考慮した浮動小数点数の変換にはどのアプローチを選ぶべきか?
Double.TryParseを使用し、CultureInfoを指定します。なぜなら、いくつかのロケールではカンマ , が小数部分の区切り文字、他のロケールではピリオド . だからです。
Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)
Valを使用するCIntを使用する開発者がテキストを直接数値に変換します: Dim n = CInt(TextBox1.Text) 確認なしに。
メリット:
デメリット:
無効な入力についてユーザーに通知するためにTryParseを使用します(上記の例を参照)。
メリット:
デメリット: