![](/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.