3

在学习 C# 基础知识时,我了解到 foreach 适用于那些已实现IEnumerable接口的集合。到目前为止一切顺利,但今天当我遇到时,DirectoryInfo我感到困惑。

如果DirectoryInfo不实施IEnumerable,那么它是如何foreach工作的?

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

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

请告诉我.......

4

2 回答 2

10

您正在使用数组

所有数组都派生自Array实现.IEnumerable

来自MSDN 上的数组(C# 编程指南) :

数组类型是从抽象基类型派生的引用类型Array。由于此类型实现IEnumerableand IEnumerable<T>,因此您可以在 C# 中的所有数组上使用 foreach 迭代。

于 2012-10-22T19:02:51.500 回答
3

DirectoryInfo.GetDirectories()方法返回一个DirectoryInfo对象数组。由于所有数组都“实现”IEnumerable,因此您可以遍历它们。

然而,需要注意的一点是,由于DirectoryInfo.GetDirectories()确实返回了一个数组,因此它必须在被调用时立即获取整个列表。虽然这适用于小型目录,但不适用于大型目录或将DirectoryInfo.GetDirectories(string, SearchOption)与 SearchOption.AllDirectories 一起使用的情况。如果您使用的是 .NET4+,您可以并且应该使用DirectoryInfo.EnumerateDirectories()或其重载之一。这些具有相同的结果,但直到需要时才创建列表。

于 2012-10-22T19:11:00.317 回答