如何将含布尔判断的If语句转换为Switch语句?C#代码报错求助
解决Switch语句改写的布尔判断问题
我来帮你理清问题所在,然后给出对应的解决方案:
为什么你的代码报错?
你遇到的问题核心是:传统C# Switch语句的case后面需要跟常量值,而你写的case Note < 1 || Note > 6是一个布尔表达式(返回true或false),但你的Switch变量是int类型的Note,两者类型不兼容,所以编译器才会报出无法转换类型的错误。
两种可行的改写方案
根据你使用的C#版本,有两种简洁的写法:
方案1:使用C# 7+的模式匹配(推荐)
从C#7开始,Switch支持关系模式和逻辑模式,可以直接在case里写条件判断,完美匹配你原有的逻辑:
int Note = 0; Console.WriteLine("What is your note?: "); Note = Convert.ToInt32(Console.ReadLine()); switch (Note) { case < 1 or > 6: Console.WriteLine("Your input is wrong!"); break; case <= 4: Console.WriteLine("Passed"); break; default: // 剩下的5、6两种情况 Console.WriteLine("Failed"); break; }
方案2:兼容旧版C#(无模式匹配)
如果你使用的是C#7之前的版本,只能通过枚举合法的常量值,用default处理非法输入:
int Note = 0; Console.WriteLine("What is your note?: "); Note = Convert.ToInt32(Console.ReadLine()); switch (Note) { case 1: case 2: case 3: case 4: Console.WriteLine("Passed"); break; case 5: case 6: Console.WriteLine("Failed"); break; default: // 匹配1以下或6以上的所有非法值 Console.WriteLine("Your input is wrong!"); break; }
总结
两种方案都能实现原If语句的逻辑:先判断输入是否合法,再根据分数判断通过/失败。如果环境允许,优先用方案1,代码更简洁易读。
内容的提问来源于stack exchange,提问作者user10657156
相关产品推荐
相关产品推荐

