用途:整理递归返回集合的几种写法
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;
}
}
}
}