Visual Basic Or,OrElse仍然返回false

时间:2017-06-02 07:34:42

标签: vb.net if-statement basic

我是VB.net的新手,我对这个语句没有什么问题,我想抛出msgBox只是因为在txtBox中txtTitul不是“Bc”。或“”或“Ing。” ... 这是每次都抛出msgBox

If Not txtTitul.Text.Equals("Bc.") _
    OrElse Not txtTitul.Text.Equals("") _
    OrElse Not txtTitul.Text.Equals("Bc.") _
    OrElse Not txtTitul.Text.Equals("Mgr.") _
    OrElse Not txtTitul.Text.Equals("Ing.") _
    OrElse Not txtTitul.Text.Equals("Mgr. art.") _
    OrElse Not txtTitul.Text.Equals("Ing. arch.") _
    OrElse Not txtTitul.Text.Equals("MUDr.") _
    OrElse Not txtTitul.Text.Equals("MVDr.") _
    OrElse Not txtTitul.Text.Equals("RNDr.") _
    OrElse Not txtTitul.Text.Equals("PharmDr.") _
    OrElse Not txtTitul.Text.Equals("PhDr.") _
    OrElse Not txtTitul.Text.Equals("JUDr.") _
    OrElse Not txtTitul.Text.Equals("PaedDr.") _
    OrElse Not txtTitul.Text.Equals("ThDr.") Then
    MsgBox("Neplatny titul!")
    Exit Sub
End If

2 个答案:

答案 0 :(得分:6)

你不想使用OrElse而是使用AndAlso,因为只有当它不是其中之一时才是无效的标题(所以不是第一个不是第二个不是第3次等......)。

但我可以向您展示一种更简单,更易于维护的方法吗?

Dim allowedTitles = {"Bc.","Ing.","Ing. arch.","MUDr.","MVDr.","RNDr.","PhDr.","PaedDr.","ThDr."}
If Not allowedTitles.Contains(txtTitul.Text) Then 
    MsgBox("Invalid title!")
End If

如果您还想接受小写,请忽略大小写,您可以使用:

If Not allowedTitles.Contains(txtTitul.Text, StringComparer.InvariantCultureIgnoreCase) Then 
    MsgBox("Invalid title!")
End If

答案 1 :(得分:1)

考虑您的输入是“Bc。”

Not txtTitul.Text.Equals("Bc.")  <- false
Not txtTitul.Text.Equals("")     <- true
false OrElse true = true

考虑您的输入是“abc”

Not txtTitul.Text.Equals("Bc.")  <- true
Not txtTitul.Text.Equals("")     <- true
true OrElse true = true

对于解决方案,你可以考虑蒂姆的回答。