2012-05-09 54 views
0

我使用Directory.GetDirectories()使用Directory.GetDirectories(「c:\」)時,爲什麼不能使用List <string>而不是string []?

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

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

當我只是好奇,爲什麼我必須使用string[]爲什麼我不能用

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

如果你真的想要一個列表,你可以調用LINQ擴展'Directory.GetDirectories(「c:\\」)。ToList()' –

+3

你也可以使用數組初始化你的列表:'_directories = new列表(目錄);' –

回答

10

因爲GetDirectories返回string[],基本上是這樣。

無論如何,你可以:

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

...或:

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

+1對於體面的解釋,而不是像其他人那樣的屈服 – RhysW

+0

@Trust me - 我是一名醫生並非居高臨下,除非他的上述評論被修改,但是對於解釋和代碼樣本+1。 – David

0

由於它的返回類型的方法的明顯。

+3

http://meta.stackexchange.com/questions/118582/what-is-an-acceptable-answer/118694#118694 –

5

您應該使用Directory.EnumerateDirectories()無論如何 - 因爲它只會枚舉目錄,而不是填充整個數組 - 這將佔用更少的內存。

從MSDN:

的EnumerateDirectories和GetDirectories方法不同 如下:當您使用EnumerateDirectories,你就可以開始 整個集合返回 之前列舉名稱的集合;當您使用GetDirectories時,必須等待 才能返回數組的名稱,然後才能訪問 陣列。因此,當您使用多個 文件和目錄時,EnumerateDirectories可以更高效。

(除非你真的需要一個滿陣)

編輯:

所以 - 回答的問題更具體的 - 如果你想返回一個列表<>類型,你是富裕的做:

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

因爲這樣可以避免轉換的'數組'步驟。

+0

+1。不直接回答這個問題,但是提供了一個很好的選擇。 – David

0

簡短的答案就是表現。如果您知道事先準備了多少物品(並且您需要進行搜索),則可以預先分配一個普通陣列並進行填充,而不會使用雙重增長策略List<>

一旦你有你的基本string[]對象,你可以很容易地將它提供給列表並追加到它,如果你真的需要。另一種方式會對最常用的用例產生性能損失。

+0

如果你知道提前的大小,你可以初始化一個帶有容量的'List',所以不需要,那個代價不需要在那裏。 – Servy

+0

我猜想,但GC仍然需要更簡單的數組來處理,因爲它在程序的生命週期中從不改變? – Blindy

相關問題