Linqとラムダ式使って、指定ディレクトリ以下のファイル一覧を取得してみた。
プログラム中の(1)のようにFileListUpを宣言してnullを代入しておかないと自分自身を再帰呼び出しするようなブログラムはFileListUpのところでエラーになる。

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

    return q.ToList();
};

var di = new DirectoryInfo(".");

var list = FileListUp(di);

// 表示する
Array.ForEach(list.ToArray(), s => Console.WriteLine(s));