首頁 >後端開發 >C++ >如何在 C# Switch 語句中實現 Fallthrough 行為?

如何在 C# Switch 語句中實現 Fallthrough 行為?

Linda Hamilton
Linda Hamilton原創
2025-01-04 07:29:35367瀏覽

How Can I Achieve Fallthrough Behavior in C# Switch Statements?

C# 中的 Switch 語句會失敗嗎?

C# 中的 Switch 語句通常會執行與符合的 case 相關的程式碼,然後退出 switch 。但是,在某些情況下,可能需要將一種情況轉移到另一種情況,稱為「失敗」。

在提供的範例中,NumberToWords 方法嘗試將數字轉換為其對應的單字表示形式。它使用三個陣列來表示數字、十和十。 switch 語句考慮輸入數字的長度以符合適當的大小寫:

  • 如果數字是三位數(情況 3),它會附加數百個單字。
  • 如果數字是兩位數(情況 2),它檢查特殊情況(十位或十位)。
  • 如果數字是一位數(情況 1),它會附加個位數。

但是,C# 編譯器會拋出錯誤,因為 switch 語句沒有明確指定每個情況後執行的位置。預設情況下,C# 要求每個 case 都有一個 break 語句或 goto 語句以防止失敗。

要在C# 中實現失敗,您可以利用以下技術:

  1. 空案例:定義一個沒有程式碼的案例,允許執行下一個案例

    switch (/*...*/) {
     case 0: break; // fall through to case 1
     case 1:
         // do something
         break;
    }
  2. goto case:使用 goto 語句跳到 switch 內的特定 case。

    switch (/*...*/) {
     case 0: goto case 1;
     case 1:
         // do something
         break;
    }
  3. goto default:使用goto default語句跳到預設情況。

    switch (/*...*/) {
     case 0: goto default;
     default:
         // do something
         break;
    }

在原始NumberToWords 範例中,goto 可用於實現所需的fallthrough 行為:

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 case 1;
    case 1:
        int o = number % 10;
        ans += numbers[o];

        break;
    default:
        throw new ArgumentException("number");
}

雖然fallthrough 可以提供更加簡潔,謹慎使用很重要。過多的失敗可能會導致程式碼混亂且難以維護,因此應謹慎使用。

以上是如何在 C# Switch 語句中實現 Fallthrough 行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn