这个问题与我以前的post有关。在这个实例中,我尝试构建一个类型为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()‘不能与类型参数一起使用。
如有任何建议或建议,将不胜感激。
发布于 2020-04-12 17:13:18
这是因为EnumerateDirectories方法返回IEnumerable<DirectoryInfo>类型,而您的预期类型是List<DirectoryInfo>,因此需要将IEnumerable转换为List,添加ToList()如下所示:
List<DirectoryInfo> dirList = dirInfo.EnumerateDirectories<DirectoryInfo>("*.", SearchOption.AllDirectories).ToList(); 发布于 2020-04-12 17:54:07
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);https://stackoverflow.com/questions/61175118
复制相似问题