程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> Visual C# 2005快速入門之switch語句

Visual C# 2005快速入門之switch語句

編輯:關於C#

某些時候,在嵌套使用if語句時,所有if語句看起來都非常相似,因為它們都在對一個完全相同的表達式進行求值,惟一的區別是每個if語句都將表達式的結果與一個不同的值進行比較。例如:

if (day == 0)
 dayName = "Sunday";
else if (day == 1)
 dayName = "Monday";
else if (day == 2)
 dayName = "Tuesday";
else if (day == 3)
 ...
else
 dayName = "Unknown";

在這些情況下,通常需要將嵌套的if語句改寫為一個switch語句,使程序更有效、更容易懂。

理解switch語句的語法

switch語句的語法如下(switch,case和default是關鍵字):

switch ( controllingExpression )
{
 case constantExpression :
  statements
  break;
 case constantExpression :
  statements
  break;
 ...
 default :
  statements
  break;
}

controllingExpression(控制表達式)只求值一次。然後,從其constantExpression值等於controllingExpression值的case開始,它下方的所有語句都會一直運行,直到遇到一個break為止。隨後,switch語句將結束,程序從switch結束大括號之後的第一個語句繼續執行,並忽略其他case。

假如任何一個constantExpression值都不等於controllingExpression的值,就運行可選標簽default之下的語句。

注意 假如controllingExpression的值和任何一個case標簽都不匹配,同時沒有發現一個default標簽,程序會跳過整個switch語句,從它的結束大括號之後的第一個語句繼續執行。

例如,前面的嵌套if語句可以改寫為以下switch語句:

switch (day)
{
 case 0 :
  dayName = "Sunday";
  break;
 case 1 :
  dayName = "Monday";
  break;
 case 2 :
  dayName = "Tuesday";
  break;
 ...
 default :
  dayName = "Unknown";
  break;
}

遵守switch語句規則

switch語句非常有用,但在使用時必須謹慎。所寫的任何switch語句都必須遵循以下規則:

只能針對基本數據類型使用switch,這些類型包括int和string等待。對於其他類型,則必須使用if語句。

case標簽必須是常量表達式(constantExpression),如42或者"42"。如果需要在運行時計算case標簽的值,必須使用if語句。

case標簽必須是惟一性的表達式;也就是說,不允許兩個case具有相同的值。

可以連續寫下一系列case標簽(中間不能間插額外的語句),從而指定自己希望在多種情況下都運行相同的語句。如果像這樣寫,那麼最後一個case標簽之後的代碼將適用於所有case。然而,假如一個標簽關聯了一個或多個語句,又沒有使用break來跳出,那麼執行就不能貫穿到後續的標簽,而且編譯器會報告一個錯誤。例如:

switch (trumps)
{
 case Hearts :
 case Diamonds : // 允許貫穿 — 標簽之間無額外代碼
  color = "Red"; // 針對Hearts和Diamonds這兩種情況都會執行的代碼
  break;
 case Clubs :
  color = "Black";
 case Spades : // 出錯 — 標簽之間有額外代碼,而且沒有使用break來跳出
  color = "Black";
  break;
}

注意 break語句是用來阻止貫穿的最常見的方式,但也可以用一個return語句或者一個throw語句來替代它。throw語句的詳情將在以後討論。

不准貫穿
   由於C#存在不准貫穿(fall through)的規則,所以可以自由地安排一個switch語句的各個區域,而不至於影響其含義(其中包括default標簽,它傳統意義上是最後一個標簽,但並非一定如此)。
  C和C++程序員要注意的是,在使用C#編程時,必須為switch語句中的每個case(包括default case)都提供一個break語句。這個要求是一件好事情,C和C++程序員經常忘記添加break語句,造成執行自動貫穿到後續的標簽,並造成很難發現的bug。
  然而,如果你真的喜歡,也可以在C#中模擬C++的貫穿行為,方法是使用一個goto語句來轉到下一個case或者default標簽。但這種用法是不推薦的,本書也不打算介紹具體細節!
  在下面的練習中,我們准備完成一個程序,它將讀取一個字符串中包含的字符,並將每個字符都映射成它的XML形式。例如,'<'字符在XML中具有特殊含義(用於構成元素),所以要想正確顯示它,就必須轉換成"&lt;"。我們打算寫一個switch語句來測試字符的值,並將特殊XML字符作為case標簽來使用。

編寫switch語句

1. 啟動Visual Studio 2005。

2. 打開SwitchStatement項目,它位於My Documents文件夾下的\Microsoft Press\Visual CSharp Step by Step\Chapter 4\SwitchStatement子文件夾中。

3. 選擇“調試”|“開始執行(不調試)”。

Visual Studio 2005將生成並運行應用程序。窗體上將出現上下兩個文本框,中間用一個Copy按鈕分隔。如圖所示。

圖 兩個文本框用一個Copy按鈕隔開

4. 在上方的文本框中輸入以下示例文本:

inRange = (lo <= number) && (number <= hi);

5. 單擊Copy。

所有內容會逐字復制到下方的文本框中,期間不會對'<'字符進行轉換。

6. 關閉窗體。

7. 在“代碼和文本編輯器”窗口中顯示Form1.cs的代碼,找到copyOne方法。

copyOne方法負責將一個字符從上方的文本框復制到下方的文本框。目前,copyOne方法中包含了一個switch語句,但其中只提供了一個default小節。

在後續的步驟中,我們將修改這個switch語句,使它能將XML中的特殊字符轉換成XML映射形式。例如,'<'字符將轉換成字符串"&lt;"。

8. 在switch語句中,於default標簽上方添加以下語句:

case '<' :
 target.Text += "&lt;";
 break;
case '>' :
 target.Text += "&gt;";
 break;
case '&' :
 target.Text += "&amp;";
 break;
case '\"' :
 target.Text += "&#34;";
 break;
case '\'' :
 target.Text += "&#39;";
 break;

注意 在最後兩個case中,反斜槓(\)是一個轉義符,它會造成後續的字符(即"和')被視為一個直接量,而不是被視為字符串或字符常量的定界符。

9. 選擇“調試”|“開始執行(不調試)”。

Visual Studio 2005將生成並運行應用程序。

10. 在上方的文本框中輸入以下文本:

inRange = (lo <= number) && (number <= hi);

11. 單擊Copy。

所有內容會復制到下方的文本框中。這一次,每個字符都會在switch語句中進行XML映射處理。

12. 關閉窗體。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved