[英]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.