C# 递归地遍历子目录并将目录添加到列表中(如果它包含任何具有特定结尾的文件)
从父目录开始,我希望递归地遍历每个目录,并将目录名添加到列表中(如果它包含任何具有特定结尾的文件) 我的第一个方法是C# 递归地遍历子目录并将目录添加到列表中(如果它包含任何具有特定结尾的文件),c#,.net,linq,C#,.net,Linq,从父目录开始,我希望递归地遍历每个目录,并将目录名添加到列表中(如果它包含任何具有特定结尾的文件) 我的第一个方法是 var allTestDirectories = new List<DirectoryInfo>(); Directory.GetFiles(parentDirectory, "*spec.js", SearchOption.AllDirectories) .ForEach(specFile => allTestDirectories.Add
var allTestDirectories = new List<DirectoryInfo>();
Directory.GetFiles(parentDirectory, "*spec.js", SearchOption.AllDirectories)
.ForEach(specFile => allTestDirectories.Add(Directory.GetParent(specFile)));
var distinctTestDirectories = allTestDirectories.Distinct().ToList();
var allTestDirectories=new List();
Directory.GetFiles(parentDirectory,“*spec.js”,SearchOption.AllDirectories)
.ForEach(specFile=>allTestDirectories.Add(Directory.GetParent(specFile)));
var distinctTestDirectories=allTestDirectories.Distinct().ToList();
这不是很好,因为各种原因,其中一个最明显的原因是它以所需的结尾遍历所有文件,而只检测其中一个文件就足够了
我假设,使用LINQ的Any
函数,在仍然是声明性的情况下,应该可以更有效地实现这一点。但是我该怎么做呢 为什么不直接:枚举所有(子)目录,使其至少包含一个具有所需结尾的文件
var distinctTestDirectories = Directory
.EnumerateDirectories(parentDirectory, "*", SearchOption.AllDirectories)
.Where(dir => Directory.EnumerateFiles(dir, "*spec.js").Any())
.ToList();
为什么不直接:枚举所有(子)目录,以便至少包含一个具有所需结尾的文件
var distinctTestDirectories = Directory
.EnumerateDirectories(parentDirectory, "*", SearchOption.AllDirectories)
.Where(dir => Directory.EnumerateFiles(dir, "*spec.js").Any())
.ToList();
您可以将GetParent放入选择框:
var allTestDirectories = new List<DirectoryInfo>();
var distinctTestDirectories = Directory.GetFiles(parentDirectory, "*spec.js", SearchOption.AllDirectories)
.Select(f => Directory.GetParent(f))
.ToList();
var allTestDirectories=new List();
var distinctTestDirectories=Directory.GetFiles(parentDirectory,“*spec.js”,SearchOption.AllDirectories)
.Select(f=>Directory.GetParent(f))
.ToList();
您可以将GetParent放入一个选择:
var allTestDirectories = new List<DirectoryInfo>();
var distinctTestDirectories = Directory.GetFiles(parentDirectory, "*spec.js", SearchOption.AllDirectories)
.Select(f => Directory.GetParent(f))
.ToList();
var allTestDirectories=new List();
var distinctTestDirectories=Directory.GetFiles(parentDirectory,“*spec.js”,SearchOption.AllDirectories)
.Select(f=>Directory.GetParent(f))
.ToList();
创建您自己的itterative函数。如果您发现自己正在执行新列表()
则停止并使用LINQ。创建您自己的itterative函数。如果您发现自己正在执行新列表()
则停止并使用LINQ。