IsNumeric()
старое ... современная практика склонна использовать Integer.TryParse()
или Double.TryParse()
, в зависимости от того, какое значение вам нужно.Вы также можете использовать CInt()
или Convert.ToInt32()
, но когда вы знаете, что начинаете со строки, синтаксический анализ - лучший выбор.
Но меня беспокоит то, что вы также должны включить Option Strict
илипо крайней мере Option Infer
.Все остальное действительно плохая практика.Имея это в виду, посмотрите на этот код:
Dim hours As String = GetSomeValueFromUser()
If IsNumeric(hours) Then
If hours < 0 Or hours > 23 Then 'a value can never be both negative *and* greater than 24
'...
End
End If
В любом разумном проекте это должно быть ошибкой компилятора, поскольку он использует строковое значение (hours
), как будто это число. не имеет значения , что вы сначала проверили с помощью IsNumeric()
.Если вы используете Option Strict
, как и должно быть, это все равно ошибка.
Это гораздо лучшая практика:
Dim hours As String = GetSomeValueFromUser()
Dim hrs As Integer
If Integer.TryParse(hours, hrs) AndAlso hrs>= 0 AndAlso hrs <= 23 Then
'code here
Else
MessageBox.Show("Please enter a Value between 0 and 23" "Input value out of range", MessageBoxButtons.RetryCancel)
End If
Еще одна вещь здесь: НИКОГДА объявляем переменную для Function без явного типа, известного компилятору.Option Infer
может немного мутить воду там, но обычно тип переменной всегда должен быть известен и фиксирован .