0

我有以下代码:

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?我的代码有什么问题?

4

6 回答 6

2

我认为您可能想要And而不是Or,因为通常, aUserID将始终不等于两个明显不同的值中的至少一个,因此其中一个或另一个比较将始终为真:

If Left(AccNo , 1) = "S" Then
    If UserID <> "Alex" And UserID <> "James" Then
         err = True
    End If
End If
于 2013-09-17T06:25:49.953 回答
0

这是因为您正在执行两个必须始终为真的“不是”或“不是”陈述,因为您测试另一个的任何值始终为真。

于 2013-09-17T06:26:42.853 回答
0

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

于 2013-09-17T06:27:21.053 回答
0

这才是正确的结果。

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

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

于 2013-09-17T06:30:20.567 回答
0

我猜你想表达“用户 id 既不是 Alex 也不是 James”之类的东西。这在逻辑上是not (UserID is Alex or UserId is James)。Asnot (x or y)与 相同not x and not y,这等于UserID is not Alex and UserId is not James,或在 VB 语法中:

UserID <> "Alex" And UserID <> "James"
于 2013-09-17T06:30:23.810 回答
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

于 2013-09-17T08:53:43.143 回答