我有以下代码:
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?我的代码怎么了?
答案 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