如果User_ID = 1或User_ID =作者ID,请使用以下只允许sub继续的If语句。
调试时我知道第一部分是真的(用户ID是1),但它仍然会弹出弹出窗口。
盯着这一段时间 - 必须有脑雾,因为看起来它应该按预期工作
If (Not User_ID = 1 OrElse Not User_ID = WL_UserID) Then
AppBoxValidation("Only the original author can edit this item!")
Exit Sub
End If
答案 0 :(得分:3)
可读性是代码的一个重要属性:
If (User_ID = 1 Or User_ID = WL_UserID) Then
'continue
Else
AppBoxValidation("Only the original author can edit this item!")
Exit Sub
End If
Alernatively,你可以写:
If (User_ID <> 1 AndAlso User_ID <> WL_UserID) Then
AppBoxValidation("Only the original author can edit this item!")
Exit Sub
End If
答案 1 :(得分:2)
如果Not User_ID = 1
为false(因为User_ID = 1
为false),则Not User_ID = WL_UserID
为真。这就是它... 但是,逻辑错误可以看作如下。
初始表达,
Not User_ID = 1 OrElse Not User_ID = WL_UserID
可以改写为
Not (User_ID = 1 AndAlso User_ID = WL_UserID)
应用De Morgan's Law。这读作:&#34; User_ID不是1 并且 User_ID是WL_UserID&#34;。假设1 <> WL_UserID
,则内部AndAlso表达式始终为false(因为User_ID不能一次等于两个不同的值)并且整个表达式为true - 总是。
在解决原始问题的过程中,我建议使用一个不在外面:
Not (User_ID = 1 OrElse User_ID = WL_UserID)
更改的表达式读作:&#34; User_Id不是1 或 User_Id不是WL_UserID&#34;
然而,采用现在正确的表达式,通过应用DM将其转换回内部Not的等价物是微不足道的。 (我不是这种结构的粉丝,大部分时间都避免使用它。)
Not User_ID = 1 AndAlso Not User_ID = WL_UserID
或者,通过转换比较运算符(Not x = y
- &gt; x <> y
),
User_ID <> 1 AndAlso User_ID <> WL_UserID
答案 2 :(得分:1)
如果当前User_ID不为1或者User_ID不等于WL_USERID,则会出现弹出窗口。 但是根据你的描述听起来应该是这样 如果User_ID = 1或User_ID = WL_UserID,则显示弹出窗口
If (User_ID = 1 OrElse User_ID = WL_UserID) Then
AppBoxValidation("Only the original author can edit this item!")
Exit Sub
End If
答案 3 :(得分:1)
我这样写:&#34;如果用户不是管理员,而用户不是作者&#34;,则禁止该行动。
If (User_ID <> 1 AndAlso User_ID <> WL_UserID) Then
AppBoxValidation("Only the original author can edit this item!")
Exit Sub
End If
这清楚地显示了逻辑,并且更短。
答案 4 :(得分:0)
如果用户ID为1,则Not User_ID =1
将评估为false
,并且将评估OrElse
右侧的代码。请参阅OrElse
运算符上的this page,特别是备注部分。