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

如何优化包含多层嵌套if else的方法的性能与代码可读性

优化方案

1. 结构/可读性优化思路

  • 抽离所有分支公共的查询生成逻辑,避免4个分支重复编写几乎一致的查询代码
  • 简化布尔判断逻辑,去掉冗余的null判断,用原生字符串相等方法做判断更安全
  • 压平嵌套层级,把三层嵌套if-else缩减为两层平级判断,逻辑走向更直观

2. 性能优化思路

  • 仅对数据源执行一次查询构建,避免重复生成查询表达式带来的解析开销,EF/EF Core等ORM场景下收益更明显
  • 避免不必要的Union操作,不需要拼接结果时直接赋值,减少结果集去重的额外开销
  • 提前确定查询条件,避免运行时重复判断相同的分支条件

优化后的代码示例

// 外层开关不符合直接跳过所有逻辑
if (string.Equals(inCheckbox, "true", StringComparison.Ordinal))
{
    // 统一生成查询逻辑,避免分支重复编码
    IQueryable<对应实体类型> query;
    if (wordArraySplit.Length > 1)
    {
        // 修正原代码笔误:原代码中未定义的变量q应为声明的迭代变量qu
        query = from qu in dataInitial
                from p in qu.Pannea
                where wordArraySplit.All(word => p.Title.Contains(word))
                select qu;
    }
    else
    {
        var searchWord = wordArraySplit[0];
        query = dataInitial.Where(qu => qu.Pannea.Any(p => p.Title.Contains(searchWord)));
    }

    // 最后根据配置决定结果赋值逻辑
    if (string.Equals(inCheckboxQu, "true", StringComparison.Ordinal))
    {
        dataResult = dataResult.Union(query);
    }
    else
    {
        dataResult = query;
    }
}

额外优化建议

  • 可提前对wordArraySplit做非空和长度校验,避免访问索引0时抛出越界异常
  • 如果是ORM查询场景,可给Pannea表的Title字段添加索引,大幅提升Contains查询的执行速度
  • 如果结果集不需要去重,可把Union替换为Concat,省去结果集去重的计算开销

内容的提问来源于stack exchange,提问作者Coder-Meca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:54:00