优化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
相关产品推荐
相关产品推荐

