Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Tingkah Laku Fallthrough Berfungsi dalam Pernyataan Tukar C#, dan Bilakah `goto case` Perlu Digunakan?

Bagaimanakah Tingkah Laku Fallthrough Berfungsi dalam Pernyataan Tukar C#, dan Bilakah `goto case` Perlu Digunakan?

Linda Hamilton
Lepaskan: 2025-01-03 06:37:40
asal
472 orang telah melayarinya

How Does Fallthrough Behavior Work in C# Switch Statements, and When Should `goto case` Be Used?

Gelagat Fallthrough dalam Pernyataan Suis C#

Dalam C#, pernyataan suis membenarkan pelaksanaan kod secara berurutan apabila memadankan berbilang kes. Walau bagaimanapun, secara lalai, pernyataan suis memerlukan pernyataan putus yang jelas pada akhir setiap kes untuk mengelakkan tingkah laku yang tidak dijangka.

Pertimbangkan contoh kod berikut:

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;
}
Salin selepas log masuk

Kod ini cuba menukar nombor kepada perwakilan rentetannya. Walau bagaimanapun, pernyataan suis menimbulkan ralat yang menyatakan bahawa kawalan tidak boleh jatuh dari kes 3 ke kes 2, dan dari kes 2 ke lalai. Sebabnya ialah dalam C#, penyataan suis memerlukan pemecahan eksplisit untuk mengelakkan pelaksanaan yang tidak diingini bagi kes berikutnya.

Untuk mencapai gelagat gagal, seseorang boleh menggunakan sintaks kes goto khas. Begini cara ia boleh dilaksanakan dalam contoh:

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");
}
Salin selepas log masuk

Dalam kod yang diubah suai ini, kata kunci kes goto membenarkan pelaksanaan diteruskan ke kes seterusnya, tanpa memerlukan pernyataan putus yang jelas. Dengan menambahkan kes goto 2 selepas kes 3, kod di bawah kes itu (yang menukarkan puluhan dan satu) dilaksanakan tanpa mengira panjang nombor input. Begitu juga, menambah goto lalai selepas kes 2 memastikan bahawa kes lalai sentiasa dilaksanakan.

Tingkah laku gagal ini mungkin diingini dalam situasi tertentu, seperti penukaran digit kepada perwakilan perkataan yang sepadan dalam contoh yang disediakan. Walau bagaimanapun, adalah penting untuk menggunakannya dengan bijak dan berhati-hati, kerana tindakan yang tidak berhati-hati boleh membawa kepada kod yang rumit dan mudah ralat.

Atas ialah kandungan terperinci Bagaimanakah Tingkah Laku Fallthrough Berfungsi dalam Pernyataan Tukar C#, dan Bilakah `goto case` Perlu Digunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan