【问题标题】:Using Or in If statement在 If 语句中使用 Or
【发布时间】:2014-09-30 09:05:03
【问题描述】:

我对 vb.net 编码真的很陌生。我搜索了一下,没有找到可以回答的问题。

If Number.Text = "974.823" Or Number.Text = "231.65" Or Number.text = "567.32" Or Number.text = "476.45" Or Number.text = "149.39" Or Number.text = "675.19" Then
    win.text = "Success"
Else
    Stop
End If

我试过OrElse,但也没用。

If Number.Text = "974.823" OrElse Number.Text = "231.65" OrElse Number.text = "567.32" OrElse Number.text = "476.45" OrElse Number.text = "149.39" OrElse Number.text = "675.19" Then 
    win.text = "Success" 
Else 
    Stop 
End If

【问题讨论】:

  • 也许分享你的 Number.Text 的内容?
  • 您的输入是什么,您希望它如何工作?
  • 不清楚你在问什么。你能改写你的问题吗?
  • 你的问题到底是什么?
  • 你能详细解释一下你的“不起作用”吗?

标签: .net vb.net validation if-statement


【解决方案1】:

换一种方式怎么样?

Dim successCodes() as string = {"974.823", "231.65", "567.32", "476.45", "149.39", "675.19"}
If successCodes.Contains(Number.Text) Then
   win.text = "Success"
Else
   Stop
End If

如果您对 OR 有信心,那么请尝试将每个 OR 都放在括号中

If (Number.Text = "974.823") Or (Number.Text = "231.65") Or (Number.text = "567.32") Then
   win.text = "Success"
Else
   Stop
End If

很久没有写VB了,如有明显的语法错误,敬请见谅

【讨论】:

    【解决方案2】:

    不确定您的问题是什么。但我会做一个List 的字符串并检查它是否包含我想要的字符串。有了它,我可以在后面使用Add 方法简单地添加我想要的任何其他字符串。例如:acceptedNumber.Add("new value")

    Dim acceptedNumber As New List(Of String)(New String() {"974.823", "231.65", "567.32", "476.45", "149.39", "675.19"})
    If acceptedNumber.Contains(Number.Text) Then
        win.text = "Success"
    Else
        Stop
    End If
    

    或者

    Dim acceptedNumber As New List(Of String)
    acceptedNumber.Add("974.823")
    acceptedNumber.Add("231.65")
    acceptedNumber.Add("567.32")
    acceptedNumber.Add("476.45")
    acceptedNumber.Add("149.39")
    acceptedNumber.Add("675.19")
    If acceptedNumber.Contains(Number.Text) Then
        win.text = "Success"
    Else
        Stop
    End If
    

    【讨论】:

      【解决方案3】:

      首先,您发布的代码应该可以工作。它不起作用的唯一原因是 Number.Text 不等于您的条件中的值之一(它是否有空格或其他字符?)

      其次,如果您使用这样的数值,您应该比较数值数据类型而不是字符串。您可以使用TryParse 来确保值的类型正确。

      第三,使用Case 语句可以提高有多个类似 Or 语句的可读性。

      所以我会建议这样的事情:

          Dim d As Decimal
      
          'See if the value can be parsed into the appropriate numeric type. 
          'If not show an error
          If Not Decimal.TryParse(Number.Text, d) Then
              MsgBox("The value entered in invalid")
              Return
          End If
      
          'Use a Select Case statement comparing the Decimal with other values
          'The D after the number tells the compiler that this is a decimal value
          Select Case d
              Case 974.823D, 231.65D, 567.32D, 476.45D, 149.39D, 675.19D
                  win.text = "Success"
              Case Else
                  Stop
          End Select
      

      【讨论】:

      • 不赞成投票(但避免反对投票),因为直接等于比较 double 值可能会遇到困难。最好从另一个值中减去一个值,并将其与可接受的容差进行比较。例如_伪代码)而不是d == 12.34Abs(d - 12.43) < 0.01
      • @BinaryWorrier - 公平点。我已修改答案以使用不会有相同问题的十进制值。
      • 如果我们想要一个更长的数字,比如 IP 地址...?
      • 您可以使用Long 代替Decimal 来表示IP 值。或者更好的是,您可以使用IPAddress 对象并比较.Address 属性(这是一个Long
      猜你喜欢
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2017-03-21
      • 2017-03-06
      • 2020-07-23
      • 1970-01-01
      相关资源
      最近更新 更多