繁体   English   中英

为什么在使用“不等于”时,if运算符不起作用?

[英]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则隐藏管理表单

假设usernameadministrator

然后,该控件将隐藏 ,因为其中之一是正确的(不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM