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

优化C#目录JSON序列化函数:移除嵌套循环实现动态DRY逻辑

重构C#目录遍历函数以符合DRY原则并支持任意层级

原函数存在的问题

  • 硬编码路径,忽略传入的repoPath参数,灵活性极差
  • 仅支持固定三级目录遍历,无法处理更深层级的目录结构
  • 多层嵌套循环导致代码大量重复,违反DRY(Don't Repeat Yourself)原则
  • 代码存在变量名错误(rket应为dir)

重构方案:递归实现动态层级遍历

通过提取递归方法,统一处理目录到RepoDirModel的转换逻辑,实现任意层级的目录遍历,完全遵循DRY原则。

首先补充RepoDirModel结构定义(原代码未提供,需保证结构匹配)

public class RepoDirModel
{
    public string Name { get; set; }
    public List<RepoDirModel> SubDirectories { get; set; } = new List<RepoDirModel>();
}

重构后的完整代码

public string RepoAsJson(string repoPath)
{
    // 直接使用传入的路径参数,彻底移除硬编码
    var rootDirModel = BuildDirModel(repoPath);
    return JsonSerializer.Serialize(rootDirModel);
}

// 递归核心方法:处理单个目录并生成对应模型,自动遍历所有子目录
private RepoDirModel BuildDirModel(string dirPath)
{
    // 创建当前目录模型,用Path.GetFileName高效获取目录名
    var dirModel = new RepoDirModel
    {
        Name = Path.GetFileName(dirPath)
    };

    // 遍历当前目录下的所有子目录,递归生成子目录模型并添加到列表
    foreach (var subDirPath in Directory.GetDirectories(dirPath))
    {
        dirModel.SubDirectories.Add(BuildDirModel(subDirPath));
    }

    return dirModel;
}

关键改进点说明

  • 递归逻辑适配任意层级:通过BuildDirModel方法递归处理每一层目录,无需修改代码即可适配任意深度的目录结构
  • 严格遵循DRY原则:所有目录模型的创建、子目录遍历逻辑集中在一个方法中,彻底消除重复代码
  • 路径处理优化:用Path.GetFileName替代字符串分割,代码更简洁且性能更优
  • 灵活性提升:完全依赖传入的repoPath参数,可适配任意目录路径
  • 代码可读性增强:移除多层嵌套循环,结构清晰,易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:10:34