Maison >développement back-end >C++ >Comment puis-je obtenir un comportement de transition dans les instructions Switch de C# ?
Comprendre l'échec de l'instruction Switch en C#
En C#, les instructions switch permettent d'orienter le flux du programme en fonction de la valeur d'une variable donnée. Cependant, les constructions if/else traditionnelles n'ont pas la capacité de « passer à travers » différents cas comme le font les instructions switch.
Considérez l'exemple suivant, qui tente de convertir un nombre en sa représentation verbale :
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; }
Lorsque ce code est compilé, il échoue avec des erreurs indiquant que le contrôle ne peut pas passer d'un cas à l'autre. Ce problème vient du fait qu'en C#, une instruction switch nécessite des pauses explicites après chaque cas pour garantir que le flux d'exécution est contrôlé.
Réaliser Fallthrough
Pour Pour obtenir une solution de repli dans une instruction switch, il existe trois options :
Exemple avec Fallthrough
La version modifiée suivante de la fonction NumberToWords utilise la syntaxe goto case pour réaliser le fallthrough :
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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!