为什么在使用Directory.GetDirectories(“c:\\”)?</string>时不能使用List <string>而不是string []

时间:2012-05-09 13:45:26

标签: c#

我很好奇为什么在使用string[]

时我必须使用Directory.GetDirectories()
string[] directories = Directory.GetDirectories("c:\\");

foreach (var dir in directories)
{
     Console.WriteLine(dir);
}

为什么我不能使用

List<string> _directories = new List<string>();
        _directories = Directory.GetDirectories("c:\\");

5 个答案:

答案 0 :(得分:10)

因为GetDirectories基本上会返回string[]

无论如何,你可以:

List<string> _directories = new List<string>(Directory.GetDirectories("c:\\"));

...或:

List<string> _directories = Directory.GetDirectories("c:\\").ToList();

答案 1 :(得分:5)

你应该使用Directory.EnumerateDirectories()无论如何 - 因为它只会枚举目录,而不是填满整个数组 - 这会占用更少的内存。

来自MSDN的

EnumerateDirectories和GetDirectories方法不同     如下:当您使用EnumerateDirectories时,您可以启动     枚举整个集合之前的名称集合     被退回;当您使用GetDirectories时,您必须等待      在您可以访问之前要返回的整个名称数组     数组。因此,当你与许多人合作时     文件和目录,EnumerateDirectories可以更有效。

(除非你真的需要填充数组)

编辑:

所以 - 更具体地回答问题 - 如果你想返回一个List&lt;&gt;类型,你做得更好:

var dirs = Directory.EnumerateDirectories("c:\\").ToList();

因为这会避免转换的“数组”步骤。

答案 2 :(得分:3)

自从Directory.GetDirectories这样的泛型引入之前,

List<T>一直存在.Net 1.1。

答案 3 :(得分:0)

因为它显然是该方法的返回类型。

答案 4 :(得分:0)

简短的回答是表现。如果你事先知道你有多少项(并且你做了搜索),你可以预先分配一个普通的数组并填入它,而不会使用List<>使用的双倍增长策略。

获得基本string[]对象后,您可以轻松将其提供给列表,并在需要时附加到该列表中。反过来会对最常用的用例造成性能损失。

相关问题