测试一个字符串是否可以在VB.NET中转换为整数

Boo*_*Boy 12 vb.net casting compact-framework

有没有更好的方法来测试字符串是否可以转换为除以下之外的整数?

Public Function IsInt(ByVal value As Object) As Boolean
    Try
        Dim temp As Integer = CInt(value)
        Return True
    Catch ex As Exception
        Return False
    End Try
End Function
Run Code Online (Sandbox Code Playgroud)

通过"更好"我的意思是更简洁和/或没有例外.

TryParse将是要走的路,但我正在使用紧凑的框架2.0和tryparse似乎没有实现....

不管怎么说,多谢拉.

似乎MarkJ是正确的,上面似乎在功能上与IsNumeric相同,所以我想这是我的答案.我不知道为什么我认为CInt比IsNumeric更严格.我想最好使用CInt和IsNumeric进行测试,因为那是我用来进行转换的功能吗?

Geo*_*ord 14

您可以使用内置的IsNumeric函数

Dim CanConvert as Boolean = IsNumeric(value)
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/6cd3f6w1(VS.71).aspx


Joh*_*ant 6

由于Compact Framework 不支持 TryParse ,因此正则表达式是您的下一个最佳选择.

第一个示例不允许小数.第二个是.

Regex.IsMatch(value, "^-?\d+$")
Regex.IsMatch(value, "^-?\d+(?:\.\d+)?$")
Run Code Online (Sandbox Code Playgroud)

如果你需要允许科学记数法,你需要再调整一下.它真的不是那么糟糕.你有^一个字符串的开头,一个可选的短划线-?,一个或多个数字\d+,一个(?:)寻找单个小数点\.和一个或多个数字的非捕获组\d+.另一个?允许非捕获组的零个或一个实例,然后是字符串的结尾$.

编辑: 我之前没有考虑过的一件事:这个方法有点不精确,因为你可以获得一个非常庞大的数字,它在数字上是一个有效的整数但不能转换为Int32.如果这是可能的话,你可以限制字符数.例如\d+,你可以做\d{1,8},而不是.

  • 该方法也不是区域感知的 - 一些文化使用逗号`,`用于十进制分隔符而不是点`.` (2认同)

Joe*_*orn 5

Public Function IsInt(ByVal value As Object) As Boolean
    Dim i As Integer
    Return Integer.TryParse(Convert.ToString(value), i)
End Function
Run Code Online (Sandbox Code Playgroud)


Gri*_*zly 5

你可以使用Integer.TryParse,这将返回一个bool,指示转换是否成功