2

我正在使用 Visual Studio 2008 为 Windows CE 6.0 紧凑型框架开发软件。

我有这个“奇怪?” isNumeric 方法有问题。还有其他更好的方法来完成这项工作吗?为什么让我例外?(事实上​​有两个……都是 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它确实是可以抛出的异常之一。将被抛出的情况是

  • 传递了一个字符串值
  • 字符串没有0xor&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 回答