[英]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.