2

私はVisualStudio2008を使用して、Windows CE 6.0、コンパクトフレームワーク用のソフトウェアを開発しています。

私はこの「奇妙な」を持っていますか?isNumericメソッドの問題。この仕事をする別のより良い方法はありますか?なぜ私に例外が発生するのですか?(実際には2つ...両方ともFormatExceptionタイプ)

ありがとうございました

dim tmpStr as object = "Hello"
if isNumeric(tmpStr) then    // EXCEPTIONs on this line
    // It's a number
else
    // it's a string
end if
4

2 に答える 2

5

FormatExceptionはドキュメントに記載されていませんが、IsNumericスローされる可能性のある例外の1つです。それが投げられる状況は

  • 文字列値を渡しました
  • 0x文字列にまたは&Hプレフィックスがありません

しかし、私はこの振る舞いの論理的根拠を見つけることができませんでした。私がそれを識別することができた唯一の方法は、リフレクターの実装を掘り下げることでした。

それを回避する最良の方法は、ラッパーメソッドを定義することだと思われます

Module Utils
  Public Function IsNumericSafe(ByVal o As Object) As Boolean
    Try
      Return IsNumeric(o)
    Catch e As FormatException
      Return False
    End Try
  End Function
End Module
于 2012-04-05T15:43:45.897 に答える
2

このエラーが発生する理由は、実際にはCFにTryParseメソッドが含まれていないためです。別の解決策は、正規表現を使用することです。

Public Function CheckIsNumeric(ByVal inputString As String) As Boolean
    Return Regex.IsMatch(inputString, "^[0-9 ]+$")
End Function 

編集

これは、あらゆるタイプの数値に一致する必要がある、より包括的な正規表現です。

Public Function IsNumeric(value As String) As Object

    'bool variable to hold the return value
    Dim match As Boolean

    'regula expression to match numeric values
    Dim pattern As String = "(^[-+]?\d+(,?\d*)*\.?\d*([Ee][-+]\d*)?$)|(^[-+]?\d?(,?\d*)*\.\d+([Ee][-+]\d*)?$)"

    'generate new Regulsr Exoression eith the pattern and a couple RegExOptions
    Dim regEx As New Regex(pattern, RegexOptions.Compiled Or RegexOptions.IgnoreCase Or RegexOptions.IgnorePatternWhitespace)

    'tereny expresson to see if we have a match or not
    match = If(regEx.Match(value).Success, True, False)

    'return the match value (true or false)
    Return match

End Function

詳細については、次の記事を参照してください:http ://www.dreamincode.net/code/snippet2770.htm

于 2012-04-05T15:43:10.280 に答える