Directory.EnumerateFiles与Directory.GetFiles有什么区别?

时间:2011-04-14 20:59:40

标签: c# .net directory io

Directory.EnumerateFilesGetFiles之间的区别是什么?

显然,一个返回一个数组,另一个返回Enumerable。

还有别的吗?

3 个答案:

答案 0 :(得分:143)

来自the docs

  

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

基本上,EnumerateFiles会返回一个IEnumerable,可以稍微进行延迟评估,而GetFiles会返回一个string[],它必须在返回之前完全填充。< / p>

答案 1 :(得分:29)

EnumerateFiles返回IEnumerable<string>,这意味着延迟执行。它仅适用于Fx4及以上版本。

答案 2 :(得分:15)

使用EnumerateFiles时,如果您使用.Last,则所有速度都会丢失。这当然有道理,因为要到达最后一个文件,它需要枚举所有文件,然后抓住最后一个文件。

然而,使用.First.FirstOrDefault变得非常快,因为它只是抓住第一个项目并继续前进。