为什么在使用 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:''");

为什么在使用 Directory.GetDirectory(“c:”) 时不能使用 List<string> 而

因为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[]对象后,可以轻松地将其馈送到列表中,并在确实需要时追加到列表中。反其道而行之,对于最常用的用例,会导致性能损失。