IsNumeric заявление и диапазон - PullRequest
0 голосов
/ 13 февраля 2019

Привет всем, я работаю над заданием, где мне нужно проверить вводимые пользователем данные.Когда я спрашивал своих инструкторов, могу ли я использовать IsNumeric для проверки диапазона между двумя числами, он просто сказал «да» и не показал мне, как это сделать.Теперь я знаю, что вы можете проверять, используя операторы if, и у меня есть несколько, делающих это с базовым:

if hours < 0 then
   Messagebox("Please enter a value greater than 0" "Input Value to 
     low" messagebox.buttons retry/cancel) ''something like that
Elseif hours > 23 then
   Messagebox( "please enter a value less than 23"  "Input Value to 
   high" messagebox.buttons retry/cancel)
End if

Я даже спросил его, могу ли я использовать оператор AND в операторе if для ранжирования данных.Снова да, без примера

Пример, который я имел в виду

If hours < 0 AND hours > 23 then
 '' continue processing
Else
    Messagebox("Please enter a Value between 0 and 23" "Input 
     value 
 out of range" messagebox.buttons retry/cancel)
End if

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

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 может немного мутить воду там, но обычно тип переменной всегда должен быть известен и фиксирован .

0 голосов
/ 13 февраля 2019

В ответ на ваш пример вы можете попробовать это:

If isnumeric(hours) then
    If hours < 0 AND hours > 23 then
        '' continue processing
    Else
        MessageBox.Show("Input value out of range", 
                        "Please enter a Value between 0 and 23",
                        MessageBoxButtons.RetryCancel)
    End if
End if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...