Вопрос

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

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

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

Это было полезно?

Решение

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

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, если это недопустимое целое число.

Другие советы

Поскольку вы используете 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);
  }
}

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

Вариант будет:

Int32.TryParse(input_string, Globalization.NumberStyles.Integer)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top