c#中switch語句用法


.NET 中C#的switch語句的語法

 

.NET 中C#的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標簽。但這種用法是不推薦的,本書也不打算介紹具體細節!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM