首页 > 解决方案 > 如何将 DirectoryInfo.EnumerateDirectories 转换为 List

问题描述

这个问题与我之前的帖子有关。在这种情况下,我尝试构建一个类型为 的变量,而不是检索目录的全名List<DirectoryInfo>

这段代码不太好用

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

抛出错误:

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List”

而这个版本:

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

抛出此错误:

非泛型方法“DirectoryInfo.EnumerateDirectories()”不能与类型参数一起使用。

任何建议或提示将不胜感激。

标签: c#ienumerable

解决方案


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

可以在最后放一个ToList()

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

但这是天真的选择。它通常对性能没有那么好。有一个理由 IEnumerable<DirectoryInfo>被选中。它在内存使用和即时/延迟操作方面具有一些不错的优势。

因此,更好的解决方法可能是将行首的类型名称替换为var

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

推荐阅读