Integer.TryParse - a better way?

2019-01-17 03:39发布

I find myself often needing to use Integer.TryParse to test if a value is an integer. However, when you use TryParse, you have to pass a reference variable to the function, so I find myself always needing to create a blank integer to pass in. Usually it looks something like:

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

I find this to be quite cumbersome considering that all I want is a simple True / False response. Is there a better way to approach this? Why isn't there an overloaded function where I can just pass the value I want to test and get a true / false response?

7条回答
Explosion°爆炸
2楼-- · 2019-01-17 03:47

No need to declare the integer.

If Integer.TryParse(intToCheck, 0) Then

or

If Integer.TryParse(intToCheck, Nothing) Then

If you have .Net 3.5 ability you can create an extension method for strings.

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

And then call like:

If value.IsInteger() Then

Sorry, getting carried away I know, but also you can add this to the MyExtensions class above in .Net 3.5 and not worry unless you need validations.

<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

Then simply use

value.ToInteger()

This will return 0 if it isn't a valid Integer.

查看更多
唯我独甜
3楼-- · 2019-01-17 03:58
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;
    }

}
查看更多
戒情不戒烟
4楼-- · 2019-01-17 04:02

Try this code.

Module IntegerHelpers

  Function IsInteger(ByVal p1 as String) as Boolean
    Dim unused as Integer = 0
    return Integer.TryParse(p1,unused)
  End Function
End Module

The nice part is that since it's declared as a Module level function it can be used without a qualifier. Example Usage

return IsInteger(mInt)
查看更多
等我变得足够好
5楼-- · 2019-01-17 04:04

A variation would be:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
查看更多
Emotional °昔
6楼-- · 2019-01-17 04:07

J Ambrose Little performed timing tests for IsNumeric checks back in 2003. You may wish to retry the mentioned tests with v2 of the CLR.

查看更多
欢心
7楼-- · 2019-01-17 04:08

Since you are using VB.net you can use the IsNumeric Function

If IsNumeric(myInt) Then
    'Do Suff here
End If
查看更多
登录 后发表回答