我很好奇为什么在使用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:\\");
答案 0 :(得分:10)
因为GetDirectories
基本上会返回string[]
。
无论如何,你可以:
List<string> _directories = new List<string>(Directory.GetDirectories("c:\\"));
...或:
List<string> _directories = Directory.GetDirectories("c:\\").ToList();
答案 1 :(得分:5)
你应该使用Directory.EnumerateDirectories()
无论如何 - 因为它只会枚举目录,而不是填满整个数组 - 这会占用更少的内存。
:
EnumerateDirectories和GetDirectories方法不同 如下:当您使用EnumerateDirectories时,您可以启动 枚举整个集合之前的名称集合 被退回;当您使用GetDirectories时,您必须等待 在您可以访问之前要返回的整个名称数组 数组。因此,当你与许多人合作时 文件和目录,EnumerateDirectories可以更有效。
(除非你真的需要填充数组)
编辑:
所以 - 更具体地回答问题 - 如果你想返回一个List&lt;&gt;类型,你做得更好:
var dirs = Directory.EnumerateDirectories("c:\\").ToList();
因为这会避免转换的“数组”步骤。
答案 2 :(得分:3)
List<T>
一直存在.Net 1.1。
答案 3 :(得分:0)
因为它显然是该方法的返回类型。
答案 4 :(得分:0)
简短的回答是表现。如果你事先知道你有多少项(并且你做了搜索),你可以预先分配一个普通的数组并填入它,而不会使用List<>
使用的双倍增长策略。
获得基本string[]
对象后,您可以轻松将其提供给列表,并在需要时附加到该列表中。反过来会对最常用的用例造成性能损失。