如果陈述总是如此

时间:2014-08-12 19:59:28

标签: vb.net if-statement

如果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

5 个答案:

答案 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,特别是备注部分。