为什么不';t或运算符在if语句中使用“;不等于”;
本文关键字:不等于 语句 为什么不 运算符 if | 更新日期: 2024-09-24 12:34:08
我对此有点困惑。如果系统的当前用户名是!=
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_admin1user_in_not_admin2
当您使用&;您检查用户是否不是admin1,也不是admin2,这可以正常工作。但是,当用||替换它时,您会检查用户是否从不同时是admin1和admin2(如果发生这种情况,这似乎很奇怪)。相反,当尝试使用||时,您还需要移动nagation。你想要的是检查用户"不是(admin1或admin2)。
如需进一步阅读,请参阅《德摩根定律》。http://en.wikipedia.org/wiki/De_Morgan%27s_laws