用途:整理递归返回集合的几种写法
1、利用添加返回集合递归
/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
public static List<string> GetAllFile(this DirectoryInfo dir, Predicate<FileInfo> match = null)
{
List<string> ss = new List<string>();
foreach (var d in dir.GetFileSystemInfos())
{
if (d is DirectoryInfo)
{
DirectoryInfo dd = d as DirectoryInfo;
ss.AddRange(dd.GetAllFile(match));
}
else if (d is FileInfo)
{
FileInfo dd = d as FileInfo;
if (match == null || match(dd))
{
ss.Add(d.FullName);
}
}
}
return ss;
}/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
public static List<string> GetAllFile(this DirectoryInfo dir, Predicate<FileInfo> match = null)
{
List<string> ss = new List<string>();
foreach (var d in dir.GetFileSystemInfos())
{
if (d is DirectoryInfo)
{
DirectoryInfo dd = d as DirectoryInfo;
ss.AddRange(dd.GetAllFile(match));
}
else if (d is FileInfo)
{
FileInfo dd = d as FileInfo;
if (match == null || match(dd))
{
ss.Add(d.FullName);
}
}
}
return ss;
}
2、利用委托递归
/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
public static List<string> GetAllFiledthis DirectoryInfo dir, Predicate<FileInfo> match = null)
{
List<string> ss = new List<string>();
Action<DirectoryInfo> act = null;
act = l =>
{
foreach (var d in l.GetFileSystemInfos())
{
if (d is DirectoryInfo)
{
DirectoryInfo dd = d as DirectoryInfo;
// HTodo :递归处
act(dd);
}
else if (d is FileInfo)
{
FileInfo dd = d as FileInfo;
if (match == null || match(dd))
{
ss.Add(d.FullName);
}
}
}
};
act(dir);
return ss;
} /// <summary> 获取当前文件夹下所有匹配的文件 </summary>
public static List<string> GetAllFiledthis DirectoryInfo dir, Predicate<FileInfo> match = null)
{
List<string> ss = new List<string>();
Action<DirectoryInfo> act = null;
act = l =>
{
foreach (var d in l.GetFileSystemInfos())
{
if (d is DirectoryInfo)
{
DirectoryInfo dd = d as DirectoryInfo;
// HTodo :递归处
act(dd);
}
else if (d is FileInfo)
{
FileInfo dd = d as FileInfo;
if (match == null || match(dd))
{
ss.Add(d.FullName);
}
}
}
};
act(dir);
return ss;
}
3、利用迭代器递归
/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
public static IEnumerable<string> GetAllFile1(this DirectoryInfo dir, Predicate<FileInfo> match = null)
{
foreach (var d in dir.GetFileSystemInfos())
{
if (d is DirectoryInfo)
{
DirectoryInfo dd = d as DirectoryInfo;
var result = dd.GetAllFile11(match);
foreach (var item in result)
{
yield return item;
}
}
else if (d is FileInfo)
{
FileInfo dd = d as FileInfo;
if (match == null || match(dd))
{
yield return d .FullName;
}
}
}
}/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
public static IEnumerable<string> GetAllFile1(this DirectoryInfo dir, Predicate<FileInfo> match = null)
{
foreach (var d in dir.GetFileSystemInfos())
{
if (d is DirectoryInfo)
{
DirectoryInfo dd = d as DirectoryInfo;
dd.GetAllFile11(match);
}
else if (d is FileInfo)
{
FileInfo dd = d as FileInfo;
if (match == null || match(dd))
{
yield return d .FullName;
}
}
}
}
本文介绍了三种递归遍历文件夹并获取匹配文件的方法:使用集合扩展递归、使用委托进行递归处理以及使用迭代器实现递归。每种方法都提供了具体的代码示例,便于读者理解和应用。
631

被折叠的 条评论
为什么被折叠?



