1. ホーム
  2. vb.net

[解決済み] 文字列 "" を 'Integer' 型に変換するのは無効です。

2022-02-07 23:37:04

質問

なぜ Conversion from string "" to type 'Integer' is not valid. ? Matchは文字列で、""と比較すると、このようなエラーが発生します。値が入力されている場合などは動作しますが、空文字列をチェックしたい場合(最後のElseIf)はエラーになります。

Dim total As Double
Dim Match As String = ""

If Match.EndsWith("HA") OrElse Match.Contains("ha") OrElse Match.Contains("Ha") Then
    Dim nonNumericCharacters As New Regex("\D")
    Dim numericOnlyString As String = nonNumericCharacters.Replace(Match, String.Empty)
    total = numericOnlyString * 10000
ElseIf Match.Contains("Ha m²") Then
    Dim nonNumericCharacters As New Regex("\D")
    Dim numericOnlyString As String = nonNumericCharacters.Replace(Match, String.Empty)
    total = numericOnlyString * 10000
ElseIf Match.Contains("m²") OrElse Match.Contains("sqm") Then
    Dim nonNumericCharacters As New Regex("\D")
    Dim numericOnlyString As String = nonNumericCharacters.Replace(Match, String.Empty)
    total = Val(numericOnlyString)
ElseIf CInt(Match) = 0 OrElse Match = "" Then
    total = Val(String.Empty)
Else
    total = Match
End If
MessageBox.Show(total)

解決方法は?

Bjørn-Roger Kringsjåのコメントにあるように、まず「悪い」文字列をチェックするために式を並べ替える必要があります。 また totalVal を空の文字列の あなたのコードは、次のように調整することができます。

...
ElseIf Match = "" OrElse CInt(Match) = 0 Then
    total = 0
Else
...

しかし、少し勉強させてもらうために、その部分のコードを次のように書き直します。

Dim ParseResult As Integer    
...
ElseIf String.IsNullOrWhiteSpace(Match) OrElse Not Integer.TryParse(Match, ParseResult) Then
    total = 0
Else
...

これは、まず Match 文字列が何もないか、空か、あるいは空白やタブなどである場合、それをパースして整数にすることを試みます。 もしそれが失敗したら、合計がゼロに設定されます。 もちろん、この処理はすべて Integer.TryParse を作成し、その結果を利用することになりますが、参考になれば幸いです。