C#猜数字游戏switch语句报错:无法将bool隐式转换为int
问题解决:C#猜数字游戏switch语句报错
错误原因
你写的switch语句使用了</>这类比较表达式,这不符合C#传统switch的语法规则:传统switch的case后面必须是与switch变量同类型的常量值,而respond > num会返回bool类型结果,和switch的int类型变量respond类型不匹配,因此触发Cannot implicitly convert type 'bool' to 'int'错误。
解决方法
针对你的场景,有两种更合适的实现方式:
方法1:使用C# 7+支持的模式匹配switch
从C# 7开始,switch支持基于表达式的模式匹配,可改写为:
switch (respond) { case var r when r > num: Console.WriteLine("猜高了!"); break; case var r when r < num: Console.WriteLine("猜低了!"); break; case var r when r == num: Console.WriteLine("You won !"); break; }
或者借助CompareTo方法简化:
switch (respond.CompareTo(num)) { case 1: Console.WriteLine("猜高了!"); break; case -1: Console.WriteLine("猜低了!"); break; case 0: Console.WriteLine("You won !"); break; }
方法2:用if-else分支替代switch(更直观)
对于这种简单的多分支比较场景,if-else是更易读的选择,完全规避switch的语法限制:
if (respond > num) { Console.WriteLine("猜高了!"); } else if (respond < num) { Console.WriteLine("猜低了!"); } else { Console.WriteLine("You won !"); }
完整修正后的代码
你的代码还有几处其他问题需要修复:
- 多余的
using System.Diagnostics.Tracing;可删除 tries变量未定义,需添加计数逻辑- 当前仅允许用户猜一次,需用循环实现多次猜测
- 未处理用户输入非数字的异常情况(可选优化)
以下是完整可运行版本:
using System; Random random = new Random(); int num = random.Next(1, 101); // 生成1-100的随机数,匹配提示的范围 int tries = 0; Console.WriteLine("This is a number guessing game between 1 - 100 ! "); while (true) { Console.WriteLine("Enter your guess : "); // 处理非数字输入 if (!int.TryParse(Console.ReadLine(), out int respond)) { Console.WriteLine("请输入有效的整数!"); continue; } tries++; if (respond > num) { Console.WriteLine("猜高了!"); } else if (respond < num) { Console.WriteLine("猜低了!"); } else { Console.WriteLine("You won !"); Console.WriteLine("It took you " + tries + " tries"); break; // 猜对后退出循环 } } Console.ReadKey();
内容的提问来源于stack exchange,提问作者Indective
相关产品推荐
相关产品推荐

