我发现自己经常需要使用Integer.TryParse来测试值是否为整数。但是,当你使用TryParse时,你必须将一个引用变量传递给函数,所以我发现自己总是需要创建一个空白整数来传入。通常它看起来像:
Dim tempInt as Integer
If Integer.TryParse(myInt, tempInt) Then
我觉得这很麻烦,因为我想要的只是一个简单的True / False响应。有没有更好的方法来解决这个问题?为什么没有一个重载函数,我可以传递我想要测试的值并获得真/假响应?
答案 0 :(得分:81)
无需声明整数。
If Integer.TryParse(intToCheck, 0) Then
或
If Integer.TryParse(intToCheck, Nothing) Then
如果你有.Net 3.5的能力,你可以为字符串创建一个扩展方法。
Public Module MyExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function IsInteger(ByVal value As String) As Boolean
If String.IsNullOrEmpty(value) Then
Return False
Else
Return Integer.TryParse(value, Nothing)
End If
End Function
End Module
然后打电话给:
If value.IsInteger() Then
很抱歉,我知道了,但你也可以将它添加到.Net 3.5上面的MyExtensions类中,除非你需要验证,否则不用担心。
<System.Runtime.CompilerServices.Extension()> _
Public Function ToInteger(ByVal value As String) As Integer
If value.IsInteger() Then
Return Integer.Parse(value)
Else
Return 0
End If
End Function
然后只需使用
value.ToInteger()
如果它不是有效的整数,则返回0.
答案 1 :(得分:7)
由于您使用的是VB.net,因此您可以使用IsNumeric函数
If IsNumeric(myInt) Then
'Do Suff here
End If
答案 2 :(得分:5)
public static class Util {
public static Int32? ParseInt32(this string text) {
Int32 result;
if(!Int32.TryParse(text, out result))
return null;
return result;
}
public static bool IsParseInt32(this string text) {
return text.ParseInt32() != null;
}
}
答案 3 :(得分:2)
试试这段代码。
Module IntegerHelpers
Function IsInteger(ByVal p1 as String) as Boolean
Dim unused as Integer = 0
return Integer.TryParse(p1,unused)
End Function
End Module
好的部分是,因为它被声明为模块级函数,所以可以在没有限定符的情况下使用它。用法示例
return IsInteger(mInt)
答案 4 :(得分:1)
为什么不编写扩展方法来清理代码?我暂时没有编写VB.Net,但这是c#中的一个例子:
public static class MyIntExtensionClass
{
public static bool IsInteger(this string value)
{
if(string.IsNullOrEmpty(value))
return false;
int dummy;
return int.TryParse(value, dummy);
}
}
答案 5 :(得分:0)
J Ambrose Little执行了timing tests for IsNumeric checks back in 2003。您可能希望使用CLR的v2重试上述测试。
答案 6 :(得分:0)
变化将是:
Int32.TryParse(input_string, Globalization.NumberStyles.Integer)