You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:35:54