在学习C#基础知识的同时,我了解到foreach适用于那些实现了IEnumerable接口的集合。到目前为止一切都很好,但是今天当我遇到DirectoryInfo时,我就迷惑了。
如果DirectoryInfo没有实现IEnumerable,那么foreach是如何工作的呢?
DirectoryInfo[] dirListing = new DirectoryInfo(@"F:\eBook").GetDirectories();
foreach (DirectoryInfo dir in dirListing)
{
Console.WriteLine(dir.Name);
}请告诉我......
发布于 2012-10-23 03:02:52
您正在使用数组。
所有数组都派生自实现IEnumerable的Array抽象类。
来自MSDN上的Arrays (C# Programming Guide):
数组类型是从抽象基类型
Array派生的引用类型。由于此类型实现了IEnumerable和IEnumerable<T>,因此可以在C#中的所有数组上使用IEnumerable迭代。
发布于 2012-10-23 03:11:00
DirectoryInfo.GetDirectories()方法返回DirectoryInfo对象的数组。因为所有的数组都“实现”了IEnumerable,所以你可以遍历它们。
但是,需要注意的一件事是,由于DirectoryInfo.GetDirectories()确实返回一个数组,因此它必须在被调用时立即获取整个列表。虽然这对于小目录很好,但对于大目录或将DirectoryInfo.GetDirectories(string, SearchOption)与SearchOption.AllDirectories一起使用的情况就不太好用了。如果你正在使用.NET4+,你可以也应该使用DirectoryInfo.EnumerateDirectories()或它的重载之一。它们具有相同的结果,但直到需要时才创建列表。
https://stackoverflow.com/questions/13017951
复制相似问题