如何在C#中实现支持动态选项数的多选项选择方法?
动态选项选择方法优化方案
直接上优化后的代码,彻底摆脱冗余的switch-case,同时支持2-5个选项的动态切换:
string OptionChoice(int howManyOptions) { // 先校验参数合法性,确保选项数量在2-5之间 if (howManyOptions < 2 || howManyOptions > 5) throw new ArgumentOutOfRangeException(nameof(howManyOptions), "选项数量必须在2到5之间"); // 生成允许的选项字符集合(包含大小写) var allowedChars = new HashSet<char>(); for (int i = 0; i < howManyOptions; i++) { char upperChar = (char)('A' + i); allowedChars.Add(upperChar); allowedChars.Add(char.ToLower(upperChar)); } // 动态构建符合匈牙利语习惯的提示文本 string optionLabels = string.Join(", ", Enumerable.Range(0, howManyOptions).Select(i => $"'{(char)('A' + i)}'")); int lastCommaIndex = optionLabels.LastIndexOf(','); if (lastCommaIndex != -1) { optionLabels = optionLabels.Remove(lastCommaIndex, 1).Insert(lastCommaIndex, " vagy"); } string prompt = $"\n\nMelyik opciót választod? (Nyomd meg az {optionLabels} billentyűt!) "; bool optionChosenIsValid = false; char optionChosen; do { Console.Write(prompt); optionChosen = Console.ReadKey().KeyChar; optionChosenIsValid = allowedChars.Contains(optionChosen); if (!optionChosenIsValid) { Console.Write("\nIlyen opció nincsen, kérlek próbáld újra!"); } } while (!optionChosenIsValid); string selectedOption = optionChosen.ToString().ToUpper(); Console.WriteLine($"\n({selectedOption}) lehetőség kiválasztva"); return selectedOption; }
核心优化点:
- 参数合法性校验:提前拦截2-5以外的非法输入,避免后续逻辑出错。
- 动态生成合法字符集:通过循环从'A'开始生成对应数量的字母,同时包含大小写版本,用HashSet实现快速存在性判断。
- 自动生成提示文本:根据选项数量拼接出符合语言习惯的提示,比如4个选项时会自动显示
'A', 'B', 'C' vagy 'D'。 - 极简验证逻辑:用HashSet的
Contains方法替代繁琐的switch-case,代码更简洁,后续扩展选项数量(比如到6个)只需调整参数范围即可。 - 统一循环逻辑:只保留一套输入循环,所有动态逻辑提前处理,彻底消除重复代码。
使用示例:
调用OptionChoice(2)会自动适配2个选项的提示与验证逻辑,调用OptionChoice(5)则切换为5个选项的模式,无需修改方法内部代码。
内容的提问来源于stack exchange,提问作者pityinmiki
相关产品推荐
相关产品推荐

