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です。この型はIEnumerableandIEnumerable<T>を実装しているため、C# のすべての配列で foreach 反復を使用できます。

于 2012-10-22T19:02:51.500 に答える
3

DirectoryInfo.GetDirectories()メソッドは、DirectoryInfoオブジェクトの配列を返します。すべての配列は IEnumerable を「実装」しているため、それらに対して foreach を実行できます。

ただし、DirectoryInfo.GetDirectories()は配列を返すため、呼び出された直後にリスト全体を取得する必要があることに注意してください。これは小さなディレクトリでは問題ありませんが、大きなディレクトリやSearchOption.AllDirectories で DirectoryInfo.GetDirectories(string, SearchOption)を使用する場合にはうまくいきません。.NET4+ を使用している場合は、DirectoryInfo.EnumerateDirectories()またはそのオーバーロードの 1 つを使用できますし、使用する必要があります。これらは同じ結果になりますが、リストは必要になるまで作成されません。

于 2012-10-22T19:11:00.317 に答える