Directory.EnumerateFiles
和 GetFiles
有什么区别?显然,一个返回数组,另一个返回 Enumerable。
还有其他的区别吗?
从官方文档中得知:
EnumerateFiles 和 GetFiles 两种方法的区别如下:使用 EnumerateFiles 方法,您可以在整个名称集合返回之前开始枚举名称集合;当您使用 GetFiles 时,必须等待整个名称数组返回后才能访问该数组。因此,当您处理许多文件和目录时,使用 EnumerateFiles 可以更有效率。
所以基本上,EnumerateFiles
返回一个可延迟评估的 IEnumerable
,而 GetFiles
返回一个必须完全填充后才能返回的 string[]
。
EnumerateFiles
返回 IEnumerable<string>
,这意味着它具有延迟执行的特性。它仅在 .net 4 及以上版本中可用。Array
和 Enumerable
方面之外,这个非常古老的问题询问了有哪些差异。你的回答适用于所有类似的情况,但并没有回答所问的问题。 - Ashigore
FileSystemEnumerableFactory.CreateFileInfoIterator()
。但是EnumerateFiles()
直接返回此迭代器,而GetFiles()
则从中构建额外的List
并调用ToArray()
。因此,如果您关心速度,最好使用EnumerateFiles()
并自己处理迭代器。 - dmitry1100Directory.EnumerateFiles(path).Any()
,它会在第一个文件后立即返回,并且几乎与文件夹为空时一样快。 - Racil Hilan