C# 从文件夹列表中检索一个文件路径的最有效方法

C# 从文件夹列表中检索一个文件路径的最有效方法,c#,linq,C#,Linq,假设我有一个超过100个文件夹路径的列表。我只想从每个文件夹路径中检索一个文件路径。以下是我正在做或计划做的事情: var Files = new List<String>(); var Directories = Directory.GetDirectories("C:\\Firstfolder\\Secondfolder\\"); Array.ForEach(Directories, D => Files.Add(Directory.GetFiles(D).FirstOrD

假设我有一个超过100个文件夹路径的列表。我只想从每个文件夹路径中检索一个文件路径。以下是我正在做或计划做的事情:

var Files = new List<String>();
var Directories = Directory.GetDirectories("C:\\Firstfolder\\Secondfolder\\");
Array.ForEach(Directories, D => Files.Add(Directory.GetFiles(D).FirstOrDefault()));
var Files=newlist();
var Directories=Directory.GetDirectories(“C:\\Firstfolder\\Secondfolder\\”;
ForEach(目录,D=>Files.Add(Directory.GetFiles(D.FirstOrDefault());

现在,这是最有效的方法吗?因为我的程序每次启动时都会执行此代码。

而不是
目录。GetFiles
用于避免将所有文件路径加载到内存中。中的这段引用解释了区别:

EnumerateFiles
GetFiles
方法的区别如下:使用EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合;使用
GetFiles
时,必须等待返回整个名称数组,然后才能访问该数组。因此,当您处理许多文件和目录时,枚举文件可以更有效


如果您使用的是.NET4.0,您应该改为使用它

var Files = Directories.SelectMany(x => Directory.EnumerateFiles(x).FirstOrDefault()).ToList();

您可以注意到,
GetFiles
返回数组,这是一个迫切需要的结果<代码>枚举文件返回<代码>IEnumerable,仅供参考,可能有点过时:请使用@“C:\Firstfolder\Secondfolder\”以避免使用双斜杠和难以阅读的反斜杠。如果您正在进行路径操作,请使用[.Nice…Short and effecient.我希望:)Oops…我想我应该在排除代码之前测试代码。但没什么大不了的,我喜欢这个想法…我必须按如下方式更改代码才能工作。var Files=String.Join(“,Directories.SelectMany(x=>Directory.EnumerateFiles(x).FirstOrDefault()).Split(新字符串[]{“C:\\”},StringSplitOptions.RemoveEmptyEntries);