选择案例陈述和数据验证

Posted

技术标签:

【中文标题】选择案例陈述和数据验证【英文标题】:Select Case statement and data validation 【发布时间】:2019-02-16 04:43:52 【问题描述】:

我正在尝试使用 select 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)

【问题讨论】:

好吧,我不知道为什么会这样,对不起。 嗯,它可以让我把那个代码弄得很奇怪。对不起,奇怪的文字。 您的文本和缩进四个空格的代码之间需要一个空行。我给你加了一个。我还重新格式化了代码,以便缩进有意义。 【参考方案1】:

不幸的是,缩进有意义并不能帮助代码有意义。 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

【讨论】:

【参考方案2】:

所有SelectIf 检查仍然会让您容易受到2 月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

【讨论】:

以上是关于选择案例陈述和数据验证的主要内容,如果未能解决你的问题,请参考以下文章

CNN实现验证码识别

机器学习交叉验证和网格搜索案例分析

大数据必学Java基础(一百一十二):开发案例之登录验证

使用 selenium java 进行表排序数据验证

验证码选择加粗的数字案例

Python之TensorFlow的(案例)验证码识别-6