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

iro*_*man 0 c#

我只是好奇为什么我必须使用string[]何时使用Directory.GetDirectories()

string[] directories = Directory.GetDirectories("c:\\");

foreach (var dir in directories)
{
     Console.WriteLine(dir);
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能用

List<string> _directories = new List<string>();
        _directories = Directory.GetDirectories("c:\\");
Run Code Online (Sandbox Code Playgroud)

Rog*_*mbe 10

因为基本上GetDirectories回报了string[].

无论如何,你可以:

List<string> _directories = new List<string>(Directory.GetDirectories("c:\\"));
Run Code Online (Sandbox Code Playgroud)

...要么:

List<string> _directories = Directory.GetDirectories("c:\\").ToList();
Run Code Online (Sandbox Code Playgroud)

  • 对于像其他人一样的体面解释而不是谦逊的+1 (4认同)

Dav*_*ish 5

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

来自MSDN:

EnumerateDirectories和GetDirectories方法的不同之处如下:使用EnumerateDirectories时,可以在返回整个集合之前开始枚举名称集合; 当您使用GetDirectories时,您必须等待返回整个名称数组,然后才能访问该数组.因此,当您使用许多文件和目录时,EnumerateDirectories可以更高效.

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

编辑:

所以 - 更具体地回答这个问题 - 如果你想返回一个List <>类型,你最好做的事情是:

var dirs = Directory.EnumerateDirectories("c:\\").ToList();
Run Code Online (Sandbox Code Playgroud)

因为这将避免转换的"数组"步骤.