C# 7.3中使用switch表达式赋值报错,求解决方案
问题原因与解决方案
核心问题
C# 7.3 不支持switch表达式(即variable switch { ... }这种语法),该特性是C# 8.0才正式引入的——这是代码报错的根本原因。另外,即使升级到支持的版本,你代码里的默认分支写法也存在语法错误(缺少_占位符)。
解决方案一:升级到C# 8.0及以上版本
如果可以升级项目的C#版本,修正后的代码如下:
void PerformArithmetic(string operation) { double num1, num2; Console.Write("Enter the first number: "); while (!double.TryParse(Console.ReadLine(), out num1)) { Console.Write("Invalid input. Please enter a valid number: "); } Console.Write("Enter the second number: "); while (!double.TryParse(Console.ReadLine(), out num2)) { Console.Write("Invalid input. Please enter a valid number: "); } // 修正switch表达式的默认分支(添加_占位符) double result = operation switch { "Addition" => num1 + num2, "Subtraction" => num1 - num2, "Multiplication" => num1 * num2, "Division" => num2 != 0 ? num1 / num2 : double.NaN, _ => throw new InvalidOperationException("Unknown operation") }; if (operation == "Division" && double.IsNaN(result)) { Console.WriteLine("Error: Division by zero is not allowed."); } else { Console.WriteLine($"Result of {operation}: {result}"); } Console.WriteLine("Press any key to return to the calculation menu."); Console.ReadLine(); }
- 给默认分支添加了
_占位符,符合C#8.0 switch表达式的语法要求 - 调整除数为0的判断逻辑,直接检查
result是否为NaN,更贴合switch表达式的输出逻辑
解决方案二:保持C# 7.3版本,改用switch语句
如果无法升级C#版本,将switch表达式替换为C#7.3支持的传统switch语句:
void PerformArithmetic(string operation) { double num1, num2; Console.Write("Enter the first number: "); while (!double.TryParse(Console.ReadLine(), out num1)) { Console.Write("Invalid input. Please enter a valid number: "); } Console.Write("Enter the second number: "); while (!double.TryParse(Console.ReadLine(), out num2)) { Console.Write("Invalid input. Please enter a valid number: "); } double result = 0; bool isUnknownOperation = false; bool isDivisionByZero = false; switch (operation) { case "Addition": result = num1 + num2; break; case "Subtraction": result = num1 - num2; break; case "Multiplication": result = num1 * num2; break; case "Division": if (num2 == 0) { isDivisionByZero = true; } else { result = num1 / num2; } break; default: isUnknownOperation = true; break; } if (isDivisionByZero) { Console.WriteLine("Error: Division by zero is not allowed."); } else if (isUnknownOperation) { throw new InvalidOperationException("Unknown operation"); } else { Console.WriteLine($"Result of {operation}: {result}"); } Console.WriteLine("Press any key to return to the calculation menu."); Console.ReadLine(); }
- 用传统switch语句替代switch表达式,完全符合C#7.3的语法规范
- 新增布尔变量标记异常情况,避免在switch分支直接抛出异常导致后续代码无法执行
内容的提问来源于stack exchange,提问作者MANSOOR KHOSHAL
相关产品推荐
相关产品推荐

