C# 为什么在使用Directory.GetDirectories(“c:\\”)时不能使用List而不是string[]?
我只是好奇为什么在使用Directory.GetDirectories时必须使用字符串[] 为什么我不能用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
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();