簡體   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