Integer.TryParse – лучший способ?
Вопрос
Мне часто приходится использовать 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)