ファイルシステムで動作するアプリケーションを書いています。アプリが最初に起動すると、後で (時間のかかる) 処理のために、要求されたファイルとフォルダーをメモリに読み込むクイック ルーチンが実行されます。(以下のコードを参照)。この時点で、処理されるファイルの数が表示されます。これは、進行状況バーを表示するために重要です。
カウントとファイル データを取得したら、後で処理するためにデータを保存する必要があります (たとえば、グローバル変数、プロパティ、またはクラスとして)。問題は、LINQを使用しているため、必然的に「var」として保存されていることです。変数を壊して調べると、かなり複雑な SelectQueryOperator と AnonymousType の組み合わせとして格納されています。
私が最初に考えたのは、先に進んでデータをループし、それを List<> として保存できる単純なデータに変換することでした (たとえば、ファイル名とパスを保存します)。処理する。いずれにせよ、処理を行うために後ですべてのデータをループする必要があり、ユーザーが最初にリストが作成されるのを待つことはできません。
このデータを保存して、最初に別のものに変換しなくても後でアクセスできるようにするにはどうすればよいですか?
var fileNames =
from dir in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)
select dir;
var fileContents = from file in fileNames.AsParallel()
// Use AsOrdered to preserve source ordering
let extension = Path.GetExtension(file)
let Text = File.ReadAllText(file)
select new { Text, FileName = file };