使用“not equals”时,为什么if或operator不在if语句中工作?

时间:2015-03-03 14:07:32

标签: c# equals operator-keyword

我对此感到有点困惑。我想隐藏一个按钮,如果系统的当前用户名是!=管理员或管理员2,但实现我预期目标的唯一方法是使用&&而不是||

 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();
        }

在第一个示例中使用||时,我知道为什么我不能使用!=

4 个答案:

答案 0 :(得分:6)

De Morgan's Laws for Boolean operations是程序员亲密理解的重要技能。

在您的情况下,当否定您需要额外的括号来正确排序操作时,或者在您的情况下,将||更改为&&。要使用||,请将

if (!(userName == @"PC\Administrator" || userName == @"PC\Administrator2"))

答案 1 :(得分:1)

将整个not表达式括在括号中并否定它。像这样:

if  (!(userName == @"PC\Administrator" || userName == @"PC\Administrator2"))
{
   button2.Hide();
}

答案 2 :(得分:1)

这是逻辑的基本规律。

De morgan's law

!(a && b) = !a || !b

有时用简单的词语来理解它更容易理解:

如果username不等于administrator username不等于administrator2,则隐藏管理员表单

我们说usernameadministrator

然后控件将隐藏,因为其中一件事情是真的(不是administrator2

为什么?

<强>问题 _____________________________________值


如果username不等于administrator _________ 0

如果username不等于administrator2 ________ 1


好的,结果是0 or 1 true

答案 3 :(得分:0)

首先,我没有真正的c#经验,但如果我正确理解你的问题,那就是你使用的逻辑,而不是c#-only的东西。

你想要方法&#34;隐藏&#34;当用户不是两个管理员之一时调用,但你尝试的逻辑是获得两个布尔值: user_is_not_admin1 user_in_not_admin2

当你使用&amp;&amp;你检查用户是不是admin1而不是admin 2,它按预期工作。 但当用||替换它时你会检查用户是否同时不是admin1和admin2(如果它发生的话似乎很奇怪)。 相反,当试图使用||时你还需要移动nagation。你想要的是检查用户&#34;不是(admin1或admin2)。

如需进一步阅读,请查看De Morgans Law。 http://en.wikipedia.org/wiki/De_Morgan%27s_laws