如果......其他......声明问题

时间:2013-09-17 06:23:25

标签: vb.net

我有以下代码:

Dim UserID As String = "James"
Dim AccNo As String = "S10001"
Dim err As Boolean = False

If Left(AccNo , 1) = "S" Then
    If UserID <> "Alex" Or UserID <> "James" Then
         err = True
    End If
End If

为什么我总是得到结果err = True?我的代码怎么了?

6 个答案:

答案 0 :(得分:2)

我认为你可能想要And而不是Or,因为一般来说,UserID总是不等于两个截然不同的值中的至少一个,所以一个或另一个比较总是如此:

If Left(AccNo , 1) = "S" Then
    If UserID <> "Alex" And UserID <> "James" Then
         err = True
    End If
End If

答案 1 :(得分:0)

这是因为你正在做两个“不是”或“除了”的陈述,这些陈述必须始终为真,因为你测试另一个的价值总是如此。

答案 2 :(得分:0)

因为虽然UserID等于'James',但它也不等于'Alex',因此条件满足并将变量更改为true。

答案 3 :(得分:0)

这是正确的结果。

第一个条件:Left(AccNo , 1) = "S"为真,因此它进入if块

第二个条件:(UserID <> "Alex" Or UserID <> "James") - &gt;如果两个结果中的任何一个为真,则代码将执行If块。 如果您不想输入条件,只需将OR更改为AND,这意味着用户应 James NOR 他应该 Alex

答案 4 :(得分:0)

我想你想要表达“用户ID既不是亚历克斯也不是詹姆斯”之类的东西。这个逻辑是not (UserID is Alex or UserId is James)。由于not (x or y)not x and not y相同,因此等于UserID is not Alex and UserId is not James或VB语法:

UserID <> "Alex" And UserID <> "James"

答案 5 :(得分:0)

作为旁注,如果你使用这样的东西,你可以使你的代码看起来更好:

If Not {"A", "B", "C"}.Contains("D") Then
        ' do something
    End If

这取代了

If "D" <> "A" AndAlso "D" <> "B" AndAlso "D" <> "C" Then
        ' do something
    End If

另外 - 正如你可能已经注意到的那样 - VB也知道“AndAlso”和“OrElse”,它们在大多数情况下应该用来取代“And”和“Or”。请检查以获得解释:AndAlso vs And