我对此感到有点困惑。我想隐藏一个按钮,如果系统的当前用户名是!=
管理员或管理员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();
}
在第一个示例中使用||
时,我知道为什么我不能使用!=
?
答案 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)
这是逻辑的基本规律。
!(a && b) = !a || !b
有时用简单的词语来理解它更容易理解:
如果username
不等于administrator
或 username
不等于administrator2
,则隐藏管理员表单
我们说username
是administrator
然后控件将隐藏,因为其中一件事情是真的(不是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