[C#] Linqと再帰でファイルの一覧表示でやった一覧の出し方、
こっちの方がよさそう

Func<DirectoryInfo, IEnumerable<string>> FileListUp = null;    // (1)こうしておかないとエラーになる
FileListUp = dirInfo =>
{
    return (from d in dirInfo.GetDirectories()
             from f in FileListUp(d)
             select f)
              .Concat(from f in dirInfo.GetFiles()
                      select f.FullName);
};

var di = new DirectoryInfo(".");

var list = FileListUp(di);		// ← (2)

// 表示する
list.ToList().ForEach(s => Console.WriteLine(s));	// ← (3)

なんでいいかというと、
感覚的に(2)で一覧が作成されそうだけど、遅延評価されて実際は(3)のToList()のタイミングで作成される。(2)のあとにlistに対してLinqを行ったりしたら、ToList()したあとに同じことをするよりも速く処理(高速に)されたする。

たとえば、(3)のところを

list.Take(10).ToList().ForEach(s => Console.WriteLine(s));	// ← (3')

に変えると、一覧の最初から10個が表示されるのだが前の[C#] Linqと再帰でファイルの一覧表示のFileListUpで同じことをやるよりも速く終わる。