тестирование, если строка может быть снята как целое число в VB.NET

От Microsoft TechNet:

Несколько специальных имен файлов резервируются системой и не могут использоваться для файлов или папок:

ДОВОД "ПРОТИВ", AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN, NUL

12
задан Booji Boy 5 November 2009 в 01:12
поделиться

10 ответов

Вы можете использовать встроенную функцию IsNumeric

Dim CanConvert as Boolean = IsNumeric(value)

http://msdn.microsoft.com/en-us/library/6cd3f6w1 (VS.71). aspx

14
ответ дан 2 December 2019 в 04:09
поделиться

Поскольку TryParse не поддерживается в Compact Framework, следующий лучший вариант - регулярное выражение.

В первом примере десятичные дроби запрещены. Второй - подходит.

Regex.IsMatch(value, "^-?\d+$")
Regex.IsMatch(value, "^-?\d+(?:\.\d+)?$")

Если вам нужно разрешить научную запись, вам нужно немного ее настроить. Это действительно не так уж и плохо. У вас есть начало строки ^ , необязательный дефис -? , одна или несколько цифр \ d + , группа без записи (?:) , который ищет единственную десятичную точку \. и одна или несколько цифр \ d + . Другой ? , чтобы разрешить ноль или один экземпляр группы без захвата, а затем конец строки $ .

Изменить: Одна вещь, о которой я раньше не думал: этот метод немного неточен, потому что вы можете получить действительно огромное число, которое численно является действительным целым числом, но не может быть преобразовано в Int32. Если это возможно, вы можете ограничить количество символов. Вместо \ d + вы можете, например, сделать \ d {1,8} .

6
ответ дан 2 December 2019 в 04:09
поделиться
Public Function IsInt(ByVal value As Object) As Boolean
    Dim i As Integer
    Return Integer.TryParse(Convert.ToString(value), i)
End Function
4
ответ дан 2 December 2019 в 04:09
поделиться

вы можете использовать Integer.TryParse , который вернет логическое значение, указывающее, было ли преобразование успешным или нет

5
ответ дан 2 December 2019 в 04:09
поделиться

хорошо, если вы хотите избежать использования исключений, вы можете сопоставить его с регулярным выражением, которое допускает только цифровые символы перед преобразованием.

3
ответ дан 2 December 2019 в 04:09
поделиться

Если вы выполняете преобразование нечасто, все, что у вас есть, в порядке (при условии, что для вас нет TryParse () ) - это не повлияет на производительность.

Если вы собираетесь выполнить миллионы преобразований, и большое количество из них может завершиться ошибкой, то обнаруживаемое вами исключение может быть проблемой производительности (возможно).

Если вы не можете использовать TryParse () вероятно, лучше всего (с точки зрения производительности) просто проверить каждый символ в строке и, если это не цифра, вернуть false. Не забудьте учесть возможные отрицательные знаки и разделители групп (если вы хотите их поддерживать).

В противном случае проанализируйте строку до типа int, что в 99% случаев будет успешным. вы получите исключение только в том случае, если он не подходит. Если вы действительно хотите избежать исключения, которое может сгенерировать Parse (), несложно самостоятельно проанализировать последовательность цифр и вернуть ошибку, если она выходит за пределы допустимого диапазона.

Джон Скит провел быстрый анализ этого ранее. Платформа содержала TryParse () :

Однако ни одно из этих действий не исправляет многословность. но пока это самодостаточный метод, нет реальной проблемы с небольшой многословностью.

2
ответ дан 2 December 2019 в 04:09
поделиться

Используйте общий метод TryParse типа Integer.

Например:

Private Function CanStringBeCastAsInteger(ByVal myString As String) As Boolean
    Dim myInt As Integer = 0
    Return Integer.TryParse(myString, myInt)
End Function

Преимущество использования метода TryParse заключается в том, что он избавляет от необходимости бросать и впоследствии перехватить исключение при сбое приведения. Создание и перехват исключений - дорогостоящая операция.

Метод TryParse не только вернет результат True / False, сообщая вам, будет ли преобразование успешным или нет, он также вернет в параметре myInt в моем примере результат преобразование для вас, все в одной строке кода.

1
ответ дан 2 December 2019 в 04:09
поделиться
Dim s as String = "23"
Dim i as Integer
If Int32.TryParse(s, i) Then
    ' String was a valid integer... '
End If
1
ответ дан 2 December 2019 в 04:09
поделиться

Вот что-то очень похожее на то, что у вас уже есть, но использует класс Convert вместо CType и не использует TryParse

    Public Function IsInt(ByVal value As Object) As Boolean
    Try
        Convert.ToInt32(value)
        Return True
    Catch ex As System.FormatException
        Return False
    End Try
End Function
1
ответ дан 2 December 2019 в 04:09
поделиться

Вам нужно будет использовать собственное регулярное выражение, например Regex.IsMatch ("4354354", "\ d +"), и по-прежнему включать блок try / catch в качестве резервной копии.

0
ответ дан 2 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: