C# Switch 語句中的失敗行為
在 C# 中,switch 語句允許在符合多個情況時順序執行程式碼。但是,預設情況下,switch 語句需要在每個 case 末端有一個明確的 break 語句,以防止意外行為。
考慮以下程式碼範例:
string NumberToWords(int number) { string[] numbers = new string[] { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; string[] tens = new string[] { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; string[] teens = new string[] { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; string ans = ""; switch (number.ToString().Length) { case 3: ans += string.Format("{0} hundred and ", numbers[number / 100]); case 2: int t = (number / 10) % 10; if (t == 1) { ans += teens[number % 10]; break; } else if (t > 1) ans += string.Format("{0}-", tens[t]); case 1: int o = number % 10; ans += numbers[o]; break; default: throw new ArgumentException("number"); } return ans; }
此程式碼嘗試將數字及其字串表示形式。但是,switch 語句會引發錯誤,指出控制不能從情況 3 轉移到情況 2,以及從情況 2 轉移到預設情況。原因是在 C# 中,switch 語句需要明確中斷以防止後續 case 的意外執行。
要實現失敗行為,可以使用特殊的 goto case 語法。以下是範例中的實作方式:
switch (number.ToString().Length) { case 3: ans += string.Format("{0} hundred and ", numbers[number / 100]); goto case 2; case 2: int t = (number / 10) % 10; if (t == 1) { ans += teens[number % 10]; break; } else if (t > 1) ans += string.Format("{0}-", tens[t]); goto default; case 1: int o = number % 10; ans += numbers[o]; break; default: throw new ArgumentException("number"); }
在此修改後的程式碼中,goto case 關鍵字允許執行跳至下一個 case,而不需要明確的 break 語句。透過在 case 3 之後加入 goto case 2,無論輸入數字的長度為何,都會執行該 case 下面的程式碼(轉換十和個)。類似地,在 case 2 之後新增 goto default 可確保始終執行 default case。
在某些情況下可能需要這種失敗行為,例如在提供的範例中將數字轉換為其對應的單字表示形式。然而,明智且謹慎地使用它很重要,因為粗心的失敗可能會導致複雜且容易出錯的程式碼。
以上是Fallthrough 行為在 C# Switch 語句中如何運作,以及何時應該使用「goto case」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!