如何将 DirectoryInfo.EnumerateDirectories 转换为 List<DirectoryInfo>

How to cast DirectoryInfo.EnumerateDirectories to List<DirectoryInfo>

这个问题与我之前的有关。在这种情况下,我没有检索目录的全名,而是尝试构建一个 List<DirectoryInfo>.

类型的变量

这段代码不太有效

DirectoryInfo dirInfo = new DirectoryInfo(path);
List<DirectoryInfo> dirList = dirInfo.EnumerateDirectories("*.", SearchOption.AllDirectories);          

抛出错误:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.List'

而这个版本:

List<DirectoryInfo> dirList = dirInfo.EnumerateDirectories<DirectoryInfo>("*.", SearchOption.AllDirectories);     

抛出此错误:

The non-generic method 'DirectoryInfo.EnumerateDirectories()' cannot be used with type arguments.

如有任何建议或提示,我们将不胜感激。

这是因为 EnumerateDirectories 方法 returns 类型 IEnumerable<DirectoryInfo> 而你期望的类型是 List<DirectoryInfo> 所以你需要将 IEnumerable 转换为 List 添加 ToList() 如下:

List<DirectoryInfo> dirList = dirInfo.EnumerateDirectories<DirectoryInfo>("*.", SearchOption.AllDirectories).ToList();   

EnumerateDirectories() returns IEnumerable<DirectoryInfo> 而不是 List<DirectoryInfo>。它们是不同的类型。

可以在最后放一个ToList():

DirectoryInfo dirInfo = new DirectoryInfo(path);
List<DirectoryInfo> dirList = dirInfo.EnumerateDirectories("*.", SearchOption.AllDirectories).ToList();  

但这是天真的选择。它通常不利于性能。 原因 IEnumerable<DirectoryInfo> 被选中。它在内存使用和 just-in-time/lazy 操作方面有一些很好的优势。

所以 更好的修复方法 可能会将行开头的类型名称替换为 var:

DirectoryInfo dirInfo = new DirectoryInfo(path);
var dirList = dirInfo.EnumerateDirectories("*.", SearchOption.AllDirectories);