Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencapai Gelagat Fallthrough dalam Pernyataan Suis C#?

Bagaimanakah Saya Boleh Mencapai Gelagat Fallthrough dalam Pernyataan Suis C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-04 22:13:46981semak imbas

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

Memahami Kegagalan Pernyataan Suis dalam C#

Dalam C#, pernyataan suis membenarkan aliran program diarahkan berdasarkan nilai pembolehubah yang diberikan. Walau bagaimanapun, binaan if/else tradisional tidak mempunyai keupayaan untuk "melewati" kes yang berbeza seperti yang dilakukan oleh pernyataan suis.

Pertimbangkan contoh berikut, yang cuba menukar nombor kepada perwakilan perkataannya:

static 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;
}

Apabila kod ini disusun, ia gagal dengan ralat yang menunjukkan bahawa kawalan tidak boleh jatuh dari satu kes ke yang lain. Isu ini berpunca daripada fakta bahawa dalam C#, pernyataan suis memerlukan rehat yang jelas selepas setiap kes untuk memastikan aliran pelaksanaan dikawal.

Mencapai Fallthrough

Untuk mencapai kegagalan dalam pernyataan suis, terdapat tiga pilihan:

  1. Kosong Kes: Kes boleh dibiarkan kosong, dengan berkesan membenarkan kes seterusnya tanpa sebarang pelaksanaan kod.
  2. Kes Goto: Sintaks kes goto boleh digunakan untuk memindahkan kawalan secara eksplisit kepada kes tertentu.
  3. Goto lalai: Kawalan pemindahan sintaks lalai goto kepada kes lalai, walaupun jika kes semasa tidak sama dengan lalai.

Contoh dengan Fallthrough

Versi diubah suai fungsi NumberToWords berikut menggunakan goto sintaks huruf besar untuk mencapai kegagalan:

static 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]);
            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");
    }
    return ans;
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Gelagat Fallthrough dalam Pernyataan Suis C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn