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

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

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

有帮助吗?

解决方案

无需声明整数。

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.

其他提示

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

If IsNumeric(myInt) Then
    'Do Suff here
End If
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;
    }

}

试试这段代码。

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)

为什么不编写扩展方法来清理代码?我暂时没有编写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);
  }
}

J Ambrose Little 执行 IsNumeric的定时测试在2003年检查。您可能希望使用CLR的v2重试上述测试。

变化将是:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top