Vb.net If语句总是正确的

Vb.net If语句总是正确的,vb.net,if-statement,Vb.net,If Statement,具有以下If语句,该语句应仅在用户ID=1或用户ID=author ID时允许sub继续 调试时,我知道第一部分为true(用户ID为1),但它仍然会触发弹出窗口 盯着这个看了一会儿-一定有脑雾,因为它看起来应该像预期的那样工作 If (Not User_ID = 1 OrElse Not User_ID = WL_UserID) Then AppBoxValidation("Only the original author can edit this item!") Exit

具有以下If语句,该语句应仅在用户ID=1或用户ID=author ID时允许sub继续

调试时,我知道第一部分为true(用户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

如果用户ID为1,
Not user_ID=1
将计算为
false
,并且将计算
OrElse
右侧的代码。请参见
OrElse
运算符上的,特别是备注部分。

如果用户ID为1,
Not user\u ID=1
将计算为
false
,并且将计算
OrElse
右侧的代码。请参见
OrElse
运算符,特别是备注部分。

可读性是代码的一个重要属性:

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
另外,你可以写:

If (User_ID <> 1 AndAlso User_ID <> WL_UserID) Then
   AppBoxValidation("Only the original author can edit this item!")
   Exit Sub
End If
如果(用户ID 1和用户ID WL\U用户ID)那么
AppBoxValidation(“只有原始作者才能编辑此项目!”)
出口接头
如果结束

可读性是代码的一个重要属性:

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
另外,你可以写:

If (User_ID <> 1 AndAlso User_ID <> WL_UserID) Then
   AppBoxValidation("Only the original author can edit this item!")
   Exit Sub
End If
如果(用户ID 1和用户ID WL\U用户ID)那么
AppBoxValidation(“只有原始作者才能编辑此项目!”)
出口接头
如果结束

如果
非用户ID=1
为假(因为
用户ID=1
为假),则
非用户ID=WL\U用户ID
为真。这就是全部。。但是,逻辑错误如下所示

最初的表达

Not User_ID = 1 OrElse Not User_ID = WL_UserID
可以重写为

Not (User_ID = 1 AndAlso User_ID = WL_UserID)
通过应用。这是这样的:“不是User_ID为1,User_ID为WL_UserID的情况”。假设
1 WL_UserID
,则内部AndAlso表达式始终为false(因为User_ID不能同时等于两个不同的值),而整个表达式始终为true

我建议,解决原始问题的方法是在外部设置一个:

Not (User_ID = 1 OrElse User_ID = WL_UserID)
更改后的表达式如下:“这不是User\u Id为1或User\u Id为WL\u UserID的情况”

然而,对于现在正确的表达式,同样通过应用DM将其转换回具有Not的内部的等价表达式是很简单的。(我不喜欢这种构造,大多数时候都避免使用。)

或者,通过比较运算符的转换(
非x=y
->
xy

User\u ID 1和also User\u ID WL\u UserID

  • (鲁比,同样的想法)

  • (Java,同样的想法)


如果
非用户ID=1
为假(因为
用户ID=1
为假),则
非用户ID=WL\u用户ID
为真。这就是全部。。但是,逻辑错误如下所示

最初的表达

Not User_ID = 1 OrElse Not User_ID = WL_UserID
可以重写为

Not (User_ID = 1 AndAlso User_ID = WL_UserID)
通过应用。这是这样的:“不是User_ID为1,User_ID为WL_UserID的情况”。假设
1 WL_UserID
,则内部AndAlso表达式始终为false(因为User_ID不能同时等于两个不同的值),而整个表达式始终为true

我建议,解决原始问题的方法是在外部设置一个:

Not (User_ID = 1 OrElse User_ID = WL_UserID)
更改后的表达式如下:“这不是User\u Id为1或User\u Id为WL\u UserID的情况”

然而,对于现在正确的表达式,同样通过应用DM将其转换回具有Not的内部的等价表达式是很简单的。(我不喜欢这种构造,大多数时候都避免使用。)

或者,通过比较运算符的转换(
非x=y
->
xy

User\u ID 1和also User\u ID WL\u UserID

  • (鲁比,同样的想法)

  • (Java,同样的想法)


如果当前用户ID不是1或用户ID不等于WL\U用户ID,则弹出窗口将出现。 但从你的描述来看,这似乎是应该的 如果用户\u ID=1或用户\u ID=WL\u用户ID,则显示弹出窗口

If (User_ID = 1 OrElse User_ID = WL_UserID) Then
    AppBoxValidation("Only the original author can edit this item!")
    Exit Sub
End If

如果当前用户ID不是1或用户ID不等于WL\U用户ID,则会出现弹出窗口。 但从你的描述来看,这似乎是应该的 如果用户\u ID=1或用户\u ID=WL\u用户ID,则显示弹出窗口

If (User_ID = 1 OrElse User_ID = WL_UserID) Then
    AppBoxValidation("Only the original author can edit this item!")
    Exit Sub
End If
我会这样写:“如果用户不是管理员,而用户不是作者”,则不允许该操作

If (User_ID <> 1 AndAlso User_ID <> WL_UserID) Then
    AppBoxValidation("Only the original author can edit this item!")
    Exit Sub
End If
如果(用户ID 1和用户ID WL\U用户ID)那么
AppBoxValidation(“只有原始作者才能编辑此项目!”)
出口接头
如果结束
这清楚地显示了逻辑,而且更短。

我会这样写:“如果用户不是管理员,而用户不是作者”,则不允许该操作

If (User_ID <> 1 AndAlso User_ID <> WL_UserID) Then
    AppBoxValidation("Only the original author can edit this item!")
    Exit Sub
End If
如果(用户ID 1和用户ID WL\U用户ID)那么
AppBoxValidation(“只有原始作者才能编辑此项目!”)
出口接头
如果结束

这清楚地显示了逻辑,而且更短。

我同意尤里的观点。我曾经在If语句中遇到过很大的麻烦,尽管从逻辑上讲If正在寻找一种不同的格式是正确的。我曾经在If语句中遇到过很大的麻烦,尽管从逻辑上讲If正在寻找不同的格式是正确的。
然后
?请告诉我这是一个打字错误。
然后
?请告诉我这是一个打字错误。我很懒,只是想在代码的开头插入一些东西。。。。谢谢你是经过编辑的版本-我在NOT前缀之前先尝试了一下,但它仍然弹出了一个弹出窗口-这就是我被抛弃的原因我很懒,只是想在代码的开头插入一些东西。。。。谢谢你是经过编辑的版本-我在NOT前缀之前先尝试了一下,但它仍然弹出了一个弹出窗口-这就是我被淘汰的原因