2012-10-22 4 views
3

C# 기본 사항을 배우면서 foreach는 IEnumerable 인터페이스를 구현 한 컬렉션에서 작동한다는 것을 배웠습니다. 지금까지 그렇게 좋았지 만 오늘 내가 왔을 때 DirectoryInfo 나는 혼란스러워했다.DirectoryInfo 열거 형

DirectoryInfoIEnumerable이 구현되지 않은 경우 foreach은 어떻게 작동합니까?

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

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

알려주세요 .......

답변

10

당신은 배열을 사용하고 있습니다.

모든 배열은 Array 추상 클래스에서 파생됩니다. IEnumerable을 구현합니다. MSDN에 Arrays (C# Programming Guide) 가입일

:

배열 유형은 추상적 기본형 Array 유래의 참조 타입이다. 이 유형은 IEnumerableIEnumerable<T>을 구현하므로 C#의 모든 배열에서 foreach 반복을 사용할 수 있습니다.

+0

고맙습니다. 위의 경우 어레이에 대해 생각하지 못했습니다. ..... 정말 많이 감사합니다 ...... –

3

DirectoryInfo.GetDirectories() 메서드는 DirectoryInfo 개체의 배열을 반환합니다. 모든 배열은 "구현"IEnumerable, 당신은 foreach 수 있습니다.

그러나 주목해야 할 점은 DirectoryInfo.GetDirectories()은 배열을 반환하므로 호출 즉시 전체 목록을 가져와야한다는 것입니다. 작은 디렉토리에서는 괜찮 으면서도 큰 디렉토리 나 SearchOption.AllDirectories와 함께 DirectoryInfo.GetDirectories(string, SearchOption)을 사용하는 경우에는 제대로 작동하지 않습니다. .NET4 +를 사용하는 경우 DirectoryInfo.EnumerateDirectories() 또는 과부하 중 하나를 사용하고 사용해야합니다. 이들은 동일한 결과를 가지지 만 목록은 필요할 때까지 작성되지 않습니다.

+0

Mathew에게 멋진 팁을 주셔서 감사합니다 .... –

+0

필요성 때문에 DirectoryInfo.EnumerateFiles (...) 대체품을 만들어야했습니다. 내 코드는 http://stackoverflow.com/a/13130054/21311에서 찾을 수 있습니다. –