2012-10-22 37 views
3

在學習C#基礎知識時,我瞭解到foreach適用於已實現IEnumerable接口的那些集合。到目前爲止這麼好,但今天當我遇到DirectoryInfo我感到困惑。DirectoryInfo枚舉

如果DirectoryInfo沒有實現IEnumerable,那麼foreach是如何工作的?

DirectoryInfo[] dirListing = new DirectoryInfo(@"F:\eBook").GetDirectories(); 

foreach (DirectoryInfo dir in dirListing) 
{ 
    Console.WriteLine(dir.Name); 
} 

請告訴我.......

回答

10

您使用的是陣列

所有陣列都來自Array抽象類確實實施IEnumerable

Arrays (C# Programming Guide)上MSDN:

數組類型爲從抽象基類派生Array引用類型。由於此類型實現IEnumerableIEnumerable<T>,因此可以在C#中的所有數組上使用foreach迭代。

+0

謝謝你這麼多odded .....我還沒有關於在上述情況下陣列....非常感謝你...... –

3

DirectoryInfo.GetDirectories()方法返回一個DirectoryInfo對象的數組。由於所有數組都「實現」了IEnumerable,所以您可以對它們進行foreach。

但需要注意的一點是,由於DirectoryInfo.GetDirectories()確實會返回一個數組,所以它必須在被調用時立即獲得整個列表。雖然這對於小目錄來說很好,但對於大型目錄或使用帶有SearchOption.AllDirectories的DirectoryInfo.GetDirectories(string, SearchOption)的情況,它並不適用。如果您使用的是.NET4 +,則可以並應該使用DirectoryInfo.EnumerateDirectories()或其中一個重載。它們具有相同的結果,但該列表只有在需要時纔會創建。

+0

謝謝馬修這樣一個奇妙的提示.... –

+0

由於需要,我必須創建DirectoryInfo.EnumerateFiles(...)的替代品。你可以在http://stackoverflow.com/a/13130054/21311找到我的代碼 –