2014-02-06 45 views
0

我意識到這就像Hello World級別的問題,但我必須問。這兩個條件可以簡化爲一個if陳述嗎?在一個IF語句中測試兩個條件

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 
+1

你會得到什麼結果? –

+4

您的'if'語句與原文的意思相反 - 如果'isChecked'在原始代碼中爲* false *,您只執行「do stuff」... –

+0

@ Pierre-LucPineault,如果結合條件,它總是滑過「做東西」。 – Risho

回答

1

你這樣做!isChecked,這與你測試的不同。試試這個:

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

我一定做了一些不同的事情,因爲它不以這種方式工作,儘管這是最有意義的。我最終使用了兩個單獨的語句,正如我在頂部顯示它,因爲我需要將它推入測試。感謝所有貢獻者。 – Risho

2

更容易遵循的邏輯,如果你在步驟簡化它...

首先你可以縮短你的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 

這使得閱讀和理解有點困難,所以讓我們進一步簡化它。假設我們的規則「做的東西,如果請求[」富「]未設置爲上」(這基本上就是你原來的邏輯是這樣做),那麼我們可以這樣做:

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

要檢查是!isChecked所以你的代碼應該是這樣的

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

的不是可以分佈並顛倒所有的檢查和&&

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

您可以結合這兩個測試詮釋簡化o:

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

您也可以在if語句的謂詞中使用它們。你可以這樣做的原因是在C#中&&||運營商「短路」。這意味着如果可以從左側確定整個表達式的值,則不評估右側。這很重要,因爲在Request["foo"]null的情況下,如果評估右側,您將得到空引用異常。在所有C派生語言中,在&&||左側測試null是非常常見的習慣用法。