繁体   English   中英

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

[英]How to cast DirectoryInfo.EnumerateDirectories to List<DirectoryInfo>

这个问题与我之前的帖子有关。 在这种情况下,我尝试构建一个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()”不能与 arguments 类型一起使用。

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

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

可以在最后放一个ToList()

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

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

所以更好的解决方法可能是用var替换行首的类型名称:

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

这是因为EnumerateDirectories方法返回IEnumerable<DirectoryInfo>的类型,而您的预期类型是List<DirectoryInfo> ,因此您需要通过添加ToList()IEnumerable转换为List ,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM