簡體   English   中英

在一個IF語句中測試兩個條件

[英]Testing for two conditions in one IF statement

我意識到這就像“ Hello World”問題一樣,但是我不得不問。 可在這兩種狀態可以簡化成一個if statament?

bool isChecked = false;

if(Request["foo"] != null) // Check box
      isChecked = (Request["foo"].ToLower() == "on");

if (!isChecked)
      // do stuff

單獨地,我在這兩種情況下都是正確的,但是當我將它們添加到與&&聯接的if語句中時,不會得到相同的結果。

if(Request["foo"] != null && (Request["foo"].ToLower() == "on"))
          // do stuff

如果逐步簡化邏輯,則遵循邏輯會更容易...

首先,您可以縮短isChecked的分配,如下所示:

bool isChecked = Request["foo"] != null && Request["foo"].ToLower() == "on";

if (!isChecked)
      // do stuff

然后,我們只需要擺脫isChecked變量,可以通過一個簡單的交換來完成:

if (!(Request["foo"] != null && Request["foo"].ToLower() == "on"))
      // do stuff

這使得閱讀和理解起來有點困難,所以讓我們進一步簡化一下。 假設我們有“如果沒有將Request [“ foo”]設置為on的話做某事”的規則(這基本上就是您原來的邏輯正在做的事情),那么我們可以這樣做:

if (Request["foo"] == null || Request["foo"].ToLower() != "on"))
      // do stuff

您執行!isChecked,這與您的測試不同。 嘗試這個:

 if(Request["foo"] != null && !(Request["foo"].ToLower() == "on"))

您正在檢查的是!isChecked因此您的代碼應為

        if (!((Request["foo"] != null) && (Request["foo"].ToLower() == "on")))
        {
            // Do Stuff
        }

可以通過反轉所有支票和&&來分配和簡化

        if ((Request["foo"] == null) || (Request["foo"].ToLower() != "on"))
        {
            // Do Stuff
        }

您可以將兩個測試合並為:

bool isChecked = Request["foo"] != null && Request["foo"].ToLower() == "on";

您也可以將它們放在if語句的謂詞中。 可以執行此操作的原因是在C#中, &&|| 操作員“短路”。 這意味着,如果可以從左側確定整個表達式的值,則不會評估右側。 這很重要,因為在Request["foo"]null的情況下,如果評估右側,則會得到null引用異常。 測試&&||左側的null 在所有C語言衍生語言中,這是一個非常常見的習慣用法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM