如何将 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);
这个问题与我之前的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);