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

如何优化C# IActionResult代码,提升整洁度与可读性?

代码优化方案与技巧

原代码问题分析

原代码存在两个核心问题:

  1. 逻辑冗余错误:第一个判断score == 100 && score >= 97完全多余,score >=97已经包含了100的场景。
  2. 可读性与维护性差:嵌套的if-else分支过多,后续修改分数区间或等级时容易遗漏分支,维护成本高。

优化后的代码版本

版本1:简化条件判断(基础优化)

利用C# 8.0+的switch表达式替代冗余的if-else,同时修复逻辑bug并增加非法分数处理:

public IActionResult Opdracht4_5(int score)
{
    string result = score switch
    {
        >= 97 => "A+",
        >= 93 => "A",
        >= 90 => "A-",
        >= 87 => "B+",
        >= 83 => "B",
        >= 80 => "B-",
        >= 77 => "C+",
        >= 73 => "C",
        >= 70 => "C-",
        >= 67 => "D+",
        >= 63 => "D",
        >= 60 => "D-",
        < 60 => "F",
        _ => "无效分数" // 处理0-100以外的非法输入
    };

    ViewBag.Output = result;
    return View();
}

版本2:结构化数据+逻辑解耦(进阶优化)

把分数等级映射抽离为可配置的结构化数据,同时将业务逻辑与控制器解耦,符合单一职责原则:

// 定义分数等级映射的记录类型(C# 9.0+)
public record ScoreGrade(int MinScore, string Grade);

// 控制器类内的静态配置(可移至配置文件或服务类)
private static readonly List<ScoreGrade> _scoreGradeMap = new()
{
    new ScoreGrade(97, "A+"),
    new ScoreGrade(93, "A"),
    new ScoreGrade(90, "A-"),
    new ScoreGrade(87, "B+"),
    new ScoreGrade(83, "B"),
    new ScoreGrade(80, "B-"),
    new ScoreGrade(77, "C+"),
    new ScoreGrade(73, "C"),
    new ScoreGrade(70, "C-"),
    new ScoreGrade(67, "D+"),
    new ScoreGrade(63, "D"),
    new ScoreGrade(60, "D-"),
    new ScoreGrade(0, "F")
};

public IActionResult Opdracht4_5(int score)
{
    // 先验证输入合法性
    if (score < 0 || score > 100)
    {
        ViewBag.Output = "无效分数,请输入0-100之间的数值";
        return View();
    }

    // 查找匹配的等级
    var grade = _scoreGradeMap.First(g => score >= g.MinScore).Grade;
    ViewBag.Output = grade;
    return View();
}

该版本优势:

  • 分数与等级的映射集中管理,修改时只需调整映射列表,无需改动逻辑代码
  • 控制器仅处理请求接收、输入验证和视图返回,业务逻辑完全分离,便于复用和单元测试

通用代码优化技巧

针对.NET/ASP.NET Core场景,分享几个实用优化思路:

  • 单一职责原则:控制器只处理HTTP请求相关逻辑,业务逻辑(如分数转等级)抽离到独立服务类或工具类
  • 避免魔法值:把固定阈值、字符串常量定义为命名常量,比如const int APlusMinScore = 97;,提升可读性
  • 结构化数据替代多分支:处理多条件映射时,优先用列表、字典存储映射关系,通过循环或LINQ查找,比嵌套if-else更易维护
  • 防御性编程:始终验证输入合法性,避免非法值导致的逻辑错误
  • 利用C#新特性:switch表达式、记录类型、LINQ等语法糖能大幅简化代码并提升可读性
  • 精准注释:只注释业务逻辑意图,无需注释显而易见的代码(如// 设置ViewBag)

内容的提问来源于stack exchange,提问作者Qukz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:45:34