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:
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!