如果想根據一個布爾表達式的結果選擇執行兩個不同的代碼塊,就可以使用if語句。
理解if語句的語法
if語句的語法格式如下(if和else是關鍵字):
if ( booleanExpression ) statement-1; else statement-2;
如果booleanExpression求值為true,就運行 statement-1;否則就運行statement-2。else關鍵字和後續的statement-2是可有可無的。如果沒有else子句,那麼在booleanExpression為false的前提下,什麼都不會發生。
例如,以下if語句用於遞增一個秒表的秒針(暫時忽略分鐘)。如果seconds的值是59,就重置為0;否則就使用操作符++來遞增:
int seconds; ... if (seconds == 59) seconds = 0; else seconds++; 只使用布爾表達式! if語句中的表達式必須放在一對圓括號中。除此之外,表達式必須是布爾表達式。在另一些語言中(尤其是C和C++),還可以使用一個整數表達式,編譯器能自動將整數值轉換成true(非零值)或false(零值)。C#不允許這樣做。如果寫這樣的一個表達式,編譯器會報錯。 假如在if語句中不慎寫了一個賦值表達式,而不是執行一個相等性測試,C#編譯器也能識別你的錯誤。例如: int seconds; ... if (seconds = 59) // 編譯時錯誤 ... if (seconds == 59) // 正確 不慎而寫成賦值表達式,是C和C++程序容易出現bug的另一個原因。在C和C++中,會將所賦的值(59)悄悄地轉換成一個布爾值(任何非零的值都會被視為true),造成每次都必定執行if語句之後的代碼。 最後,可以將一個布爾變量作為表達式使用,如下例所示: bool inWord; ... if (inWord == true) // 可以,但不常用 ... if (inWord) // 更好
使用塊來分組語句
有時,需要在一個布爾表達式為true的前提下運行兩個或者更多的語句。可以將要運行的語句分組到一個新方法中,然後調用那個方法。但是,一個更簡單的做法是將語句分組到一個塊(block)中。塊是指用一對大括號來封閉的一系列語句。在下例中,兩個語句將seconds變量重置為零,並使minutes變量遞增。我們用一個塊來分組這兩個語句。假如seconds的值等於59,就執行該塊:
int seconds = 0; int minutes = 0; ... if (seconds == 59) { seconds = 0; minutes++; } else seconds++;
重要提示 假如遺漏大括號,將造成兩個嚴重後果。首先,C#編譯器只將第一個語句(seconds=0)與if語句關聯起來,下一個語句(minutes++)將不再成為if語句的一部分。其次,當編譯器遇到else關鍵字時,不會將它與前一個if語句關聯起來,所以會報告語法錯誤。
嵌套if語句
可以在一個if語句中嵌套其他if語句。這樣一來,就可以將一系列布爾表達式鏈接起來,它們將依次測試,直到其中一個求值為true。在下例中,假如day值為0,則第一個測試求值為true,值"Sunday"將賦給dayName變量。假如day值不為0,則第一個測試失敗,控制將傳遞給else子句。該子句將運行第二個if語句,將day的值與1進行比較。注意,只有在第一個if測試為false的前提下,才會執行第二個if。類似地,只有在第一個和第二個if測試為false的前提下,才會執行第三個if。
if (day == 0) dayName = "Sunday"; else if (day == 1) dayName = "Monday"; else if (day == 2) dayName = "Tuesday"; else if (day == 3) dayName = "Wednesday"; else if (day == 4) dayName = "Thursday"; else if (day == 5) dayName = "Friday"; else if (day == 6) dayName = "Saturday"; else dayName = "unknown";
在下面的練習中,我們將寫一個方法,以便使用嵌套的if語句來比較兩個日期。
一、編寫if語句
1. 啟動Microsoft Visual Studio 2005。
2. 打開Selection項目,它位於My Documents文件夾下的\Microsoft Press\Visual CSharp Step by Step\Chapter 4\Selection子文件夾中。
3. 選擇“調試”|“開始執行(不調試)”。
Visual Studio 2005將生成並運行應用程序。窗體上顯示了兩個DateTimePicker控件,分別名為first和second(這種控件將顯示一個日歷,便於用戶通過單擊下拉按鈕來選擇一個日期)。兩個控件當前都設置成今天的日期。