Выберите Case case и подтверждение данных - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь проверить диапазоны данных с помощью оператора выбора регистра.У меня проблемы с другими вложенными выборками.Это возможно, или я хотел бы думать?Или я должен отделить операторы выбора case, которые будут сложены?

Например, это мой код в vb:

Select Case intyear
    Case 2000 To 2025
        Select Case intmonth
            Case 1 To 12
                BlnDateValid = True
        End Select
        Select Case intDay
            Case 1 To 31
                BlnDateValid = True
        End Select
        Select Case intHours
            Case 0 To 23
                BlnDateValid = True
        End Select
        Select Case intAddDays
            Case 0 To 60
                BlnDateValid = True
        End Select
        Select Case intAddHours
            Case 0 To 23
                BlnDateValid = True
        End Select
    Case Else
        BlnDateValid = False
End Select


If blnDatevalid = false then
    MessagebBox.Show("Please check all fields and enter valid 
data", "Invalid data", MessageBoxButtons.OK)

Ответы [ 2 ]

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

Все проверки Select или If по-прежнему оставляют вас уязвимыми для бессмысленных значений, таких как 30 февраля. Лучше на самом деле попытаться создать значение DateTime.

Dim d As DateTime
Dim t As TimeSpan
Try
    d = New DateTime(intYear, intMonth, intDay, intHours, 0, 0)
    t = New TimeSpan(intAddDays, intAddHours, 0, 0)
    If t > (New TimeSpan(60, 23, 0, 0)) Then Throw New ArgumentOutOfRangeException() 
Catch
    MessagebBox.Show("Please check all fields and enter valid data", "Invalid data", MessageBoxButtons.OK)
End Try

или выможет создать строку и попытаться разобрать ее:

If Not DateTime.TryParse($"{intYear}-{intMonth}-{intDay} {intHours}:00:00")
    MessagebBox.Show("Please check all fields and enter valid data", "Invalid data", MessageBoxButtons.OK)
End If
0 голосов
/ 16 февраля 2019

К сожалению, смысл отступа не помогает коду иметь смысл.Весь смысл Select Case в том, чтобы аккуратно выбрать один из нескольких случаев.Select Case с одним регистром является неверным кодом, и вместо этого вы должны использовать оператор If.В этом случае особенно следует использовать оператор If, поскольку все эти операторы Select Case можно заменить одним оператором If.

If Not (intyear >= 2000 AndAlso intyear <= 2025 AndAlso
        intmonth >= 1 AndAlso intmonth <= 12 AndAlso
        intDay >= 1 AndAlso intDay <= 31 AndAlso
        intHours >= 0 AndAlso intHours <= 23 AndAlso
        intAddDays >= 0 AndAlso intAddDays <= 60 AndAlso
        intAddHours >= 0 AndAlso intAddHours <= 23) Then
    MessagebBox.Show("Please check all fields and enter valid data", "Invalid data", MessageBoxButtons.OK)
End If
...