Integer.TryParse - лучший способ? - PullRequest
31 голосов
/ 07 января 2009

Мне часто приходится использовать Integer.TryParse, чтобы проверить, является ли значение целым числом. Однако, когда вы используете TryParse, вы должны передать в функцию ссылочную переменную, поэтому мне всегда нужно создать пустое целое число для передачи. Обычно это выглядит примерно так:

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

Я нахожу это довольно громоздким, учитывая, что все, что я хочу, - это простой ответ True / False. Есть ли лучший способ приблизиться к этому? Почему нет перегруженной функции, где я могу просто передать значение, которое я хочу проверить, и получить ответ истина / ложь?

Ответы [ 7 ]

81 голосов
/ 07 января 2009

Нет необходимости объявлять целое число.

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

Извините, я увлекся, я знаю, но вы также можете добавить это в класс MyExtensions выше .Net 3.5 и не беспокоиться, если вам не нужны проверки.

<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, если не является действительным целым числом.

7 голосов
/ 07 января 2009

Поскольку вы используете VB.net, вы можете использовать функцию IsNumeric

If IsNumeric(myInt) Then
    'Do Suff here
End If
5 голосов
/ 07 января 2009
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;
    }

}
2 голосов
/ 07 января 2009

Попробуйте этот код.

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)
1 голос
/ 07 января 2009

Почему бы не написать метод расширения для очистки вашего кода? Я некоторое время не писал 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);
  }
}
0 голосов
/ 10 марта 2014

Вариация будет:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
0 голосов
/ 07 января 2009

J Амброз Литтл выполнил временные тесты для проверки IsNumeric еще в 2003 . Вы можете повторить указанные тесты с версией 2 CLR.

...