Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在使用Directory.GetDirectories(“c:\\”)时不能使用List而不是string[]?_C# - Fatal编程技术网

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

C# 为什么在使用Directory.GetDirectories(“c:\\”)时不能使用List而不是string[]?,c#,C#,我只是好奇为什么在使用Directory.GetDirectories时必须使用字符串[] 为什么我不能用 List<string> _directories = new List<string>(); _directories = Directory.GetDirectories("c:\\"); 因为GetDirectories基本上返回字符串[] 无论如何,你可以: List<string> _directories = new Lis

我只是好奇为什么在使用Directory.GetDirectories时必须使用字符串[]

为什么我不能用

List<string> _directories = new List<string>();
        _directories = Directory.GetDirectories("c:\\");
因为GetDirectories基本上返回字符串[]

无论如何,你可以:

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

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

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

无论如何,您应该使用Directory.EnumerateDirectories,因为它只会枚举目录,而不会填充整个数组,这样会占用更少的内存

从MSDN:

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

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

编辑:

因此,为了更具体地回答问题,如果希望返回列表类型,最好执行以下操作:

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

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

自从.Net 1.1引入泛型(如)之前就已经存在了。

简单的答案是性能。如果您事先知道将有多少项,并且您为搜索做了什么,那么您可以预先分配一个普通数组并填充它,而无需使用双增长策略惩罚列表


一旦你有了基本的string[]对象,你就可以很容易地将它添加到一个列表中,如果你真的需要的话,还可以添加到列表中。如果你真的想要一个列表,你可以调用LINQ扩展目录。GetDirectoriesc:\\\。ToList你也可以用数组初始化你的列表:\ u directories=new Listdirectories+1是为了体面的解释,而不是像其他人那样的谴责guys@Trust我-我是一名医生并不是居高临下,除非他在上面的评论被修改,而是+1作为解释和代码示例。没有直接回答这个问题,但是给出了一个很好的选择。如果你提前知道列表的大小,你可以初始化一个有容量的列表,所以不,这个成本不需要存在。我想,但是数组仍然必须更简单,GC才能处理,因为它在程序的生命周期内不会改变,对吗?
var dirs = Directory.EnumerateDirectories("c:\\").ToList();