【问题标题】: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)

【问题讨论】:

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

标签: vb.net visual-studio-2010 select-case


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 2014-09-28
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2010-10-30
      相关资源
      最近更新 更多