为什么在使用 Directory.GetDirectory(“c:”) 时不能使用 List 而
本文关键字:不能 List string GetDirectory Directory 为什么 | 更新日期: 2023-09-27 18:33:33
我只是好奇为什么在使用Directory.GetDirectories()
时必须使用string[]
string[] directories = Directory.GetDirectories("c:''");
foreach (var dir in directories)
{
Console.WriteLine(dir);
}
为什么我不能使用
List<string> _directories = new List<string>();
_directories = Directory.GetDirectories("c:''");
因为GetDirectories
基本上会返回一个string[]
。
无论如何,您可以:
List<string> _directories = new List<string>(Directory.GetDirectories("c:''"));
。或:
List<string> _directories = Directory.GetDirectories("c:''").ToList();
无论如何,
您应该使用 Directory.EnumerateDirectories()
- 因为它只会枚举目录,而不是填满整个数组 - 这将使用更少的内存。
来自 MSDN:
枚举目录和获取目录方法不同 如下所示:当您使用枚举目录时,您可以启动 在整个集合之前枚举名称集合 被退回;当您使用 GetDirectory 时,您必须等待 在访问之前要返回的整个名称数组 数组。因此,当您与许多人合作时 文件和目录,枚举目录可以更有效率。
(除非你真的需要一个填充数组)
编辑:
所以 - 更具体地回答这个问题 - 如果你想返回一个 List<> 类型,你最好这样做:
var dirs = Directory.EnumerateDirectories("c:''").ToList();
因为这将避免转换的"数组"步骤。
Directory.GetDirectory 从 .Net 1.1 开始就已经存在了,然后引入了 List<T>
等泛型。
因为它显然是该方法的返回类型。
简短的回答是性能。如果您事先知道将拥有多少项目(并且您确实用于搜索),则可以预先分配一个普通数组并填写它,而不会List<>
使用双增长策略的惩罚。
获得基本string[]
对象后,可以轻松地将其馈送到列表中,并在确实需要时追加到列表中。反其道而行之,对于最常用的用例,会导致性能损失。