33

我发现自己经常需要使用 Integer.TryParse 来测试一个值是否为整数。但是,当您使用 TryParse 时,您必须将引用变量传递给函数,所以我发现自己总是需要创建一个空白整数来传递。通常它看起来像:

Dim tempInt as Integer
If Integer.TryParse(myInt, tempInt) Then

考虑到我想要的只是一个简单的真/假响应,我觉得这很麻烦。有没有更好的方法来解决这个问题?为什么没有一个重载函数,我可以只传递我想测试的值并获得真/假响应?

4

7 回答 7

87

无需声明整数。

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。

于 2009-01-07T03:03:33.207 回答
8

由于您使用的是 VB.net,因此您可以使用 IsNumeric 函数

If IsNumeric(myInt) Then
    'Do Suff here
End If
于 2009-01-07T02:59:47.660 回答
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;
    }

}
于 2009-01-07T03:22:49.873 回答
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)
于 2009-01-07T02:58:40.627 回答
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);
  }
}
于 2009-01-07T03:08:27.720 回答
0

J Ambrose Little早在 2003 年就对 IsNumeric 检查进行了计时测试。您可能希望使用 CLR v2 重试上述测试。

于 2009-01-07T03:34:58.320 回答
0

一个变化是:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
于 2014-03-10T14:36:42.917 回答