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

如何简化这段C#文件存在性判断的嵌套代码?

代码简化与问题分析

原代码存在的问题

  • 空的if块(if (File.Exists(...)) { })完全冗余,既无实际逻辑又降低代码可读性
  • 多层嵌套的if-else结构让逻辑层级混乱,增加阅读和维护成本
  • 遍历systemPaths的写法偏繁琐,直观性不足

简化后的代码方案

我们可以把所有候选路径按优先级整理成序列,依次检查后找到第一个存在的文件路径赋值给a,逻辑更清晰:

var a = string.Empty;

// 按优先级生成候选路径列表
var candidatePaths = new List<string>
{
    Path.Combine(modelPath, "attributes", filename),
    GetSaveAsAttribute(firmPath)
};
// 添加systemPaths对应的所有候选路径
candidatePaths.AddRange(systemPaths.Select(p => GetSaveAsAttribute(p)));

// 遍历候选路径,找到第一个存在的文件
foreach (var path in candidatePaths)
{
    if (File.Exists(path))
    {
        a = path;
        break;
    }
}

如果项目中使用LINQ,还可以进一步简化为一行代码:

var a = new[] { Path.Combine(modelPath, "attributes", filename), GetSaveAsAttribute(firmPath) }
    .Concat(systemPaths.Select(p => GetSaveAsAttribute(p)))
    .FirstOrDefault(File.Exists) ?? string.Empty;

说明

  • 两种方案完全保留原代码的逻辑优先级:先检查modelPath组合的路径,再检查firmPath对应的路径,最后遍历systemPaths找到第一个存在的路径
  • 移除了冗余的空if块,代码结构更清爽,逻辑一目了然
  • LINQ版本更简洁,若团队对LINQ熟悉度较高可选用;foreach版本可读性更强,适合所有场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:09:26