我正在使用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
答案 0 :(得分:5)
即使FormatException
的文档中没有列出IsNumeric
,但它确实是可以抛出的异常之一。它将被抛出的环境是
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
答案 1 :(得分: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