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; }
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"); }
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!