![](/img/trans.png)
[英]Why does a nested if-statement work, but the "&&" operator doesn't? (letter counting script)
[英]Why doesn't or operator work in if statement when using “not equals”?
我对此有些困惑。 如果系统的当前用户名是!=
Administrator或Administrator2,我想隐藏一个按钮,但是要达到我期望的目标的唯一方法是使用&&
而不是||
。
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
if
(userName != @"PC\Administrator" && userName != @"PC\Administrator2")
{
button2.Hide();
}
但是,在我的表单的另一个位置打开button2
,如果我使用==
,那似乎可行吗?
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
var adminform = new AdminForm();
if (userName == @"PC\Administrator" || userName == @"PC\Administrator2")
{
adminform.Show();
}
知道为什么我不能使用||
在第一个示例中使用!=
时?
De Morgan的布尔运算定律是程序员深入了解的一项重要技能。
在您的情况下,否定时需要附加括号以正确地对操作进行排序,或者如您所愿,更改||
到&&
。 使用||
你把
if (!(userName == @"PC\Administrator" || userName == @"PC\Administrator2"))
将整个not表达式括在括号中并取反。 像这样:
if (!(userName == @"PC\Administrator" || userName == @"PC\Administrator2"))
{
button2.Hide();
}
这是逻辑的基本定律。
!(a && b) = !a || !b
有时候,用通俗易懂的文字写起来更容易理解:
如果username
不等于administrator
或 username
不等于administrator2
则隐藏管理表单
假设username
是administrator
然后,该控件将隐藏 ,因为其中之一是正确的(不是administrator2
)
为什么呢
问题 _____________________________________值
如果username
不等于administrator
_________0
如果username
不等于administrator2
________1
好的,所以结果是0 or 1
,这是true
首先,我真的没有c#的使用经验,但是如果我正确理解了您的问题,那是您使用的逻辑,而不是仅用于c#的东西。
您希望当用户不是两个管理员之一时调用方法“ hide”,但是您尝试的逻辑是获取两个布尔值:user_is_not_admin1 user_in_not_admin2
使用&&时,请检查该用户不是admin1还是admin 2,这可以按预期工作。 但是,当用||替换它时 您将检查该用户永远不会同时使用admin1和admin2(如果发生这种情况,这似乎很奇怪)。 相反,当尝试使用||时 您还需要移动命名。 您要检查的是“不是”用户(admin1或admin2)。
为了进一步阅读,请看《 De Morgans Law》。 http://en.wikipedia.org/wiki/De_Morgan%27s_laws
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.