オブジェクト FileInfo[] にファイルの配列があります。
私のサービスでは、現在ファイルをループして処理しています。
ファイルをループして、処理中にコレクションから削除したい。
これにはキューが理想的だと思いますが、キュー コレクションをループするにはどうすればよいですか?
(これまで C# でキューを使用したことがありません)
using System.Collections.Generic;
private void DoSomething(FileInfo [] files)
{
Queue<FileInfo> f = new Queue<FileInfo>(files);
while (f.Count > 0) {
FileInfo current = f.Dequeue();
// Process 'current'
}
}
C# で他のほとんどのコレクションを反復処理するのと同じ方法でキューを反復処理します - 以下を使用しforeach
ます。
foreach (FileInfo file in queue)
{
// Do stuff
}
ただし、上記のコードを使用すると、本文内でキューに追加できません。それをしたい場合は、次のようにする必要があります。
while (queue.Count > 0)
{
FileInfo file = queue.Dequeue();
// You can still use queue.Enqueue() here
}
(これらは両方とも、queue
がタイプであると想定していQueue<FileInfo>
ます。)
キューを使用すると、アイテムを処理するときにキューからアイテムをポップします。
while (queue.Count > 0) {
T item = queue.Dequeue()
ProcessItem(item)
}
また、queue は IEnumberable を実装しているため、foreach も使用できますが、(一般に) 列挙しているコレクションを変更することはできません。
Queue<FileInfo> q = new Queue<FileInfo>(yourFileInfoArray);
while (q.Count > 0)
{
FileInfo fi = q.Dequeue();
// do stuff with fi
}
これを行うもう 1 つの方法は、単純に FileInfo 配列を逆方向に繰り返し処理し、各要素をポップすることです。
FileInfo[] f = ...
for(int i = f.Length - 1; i >= 0; i--)
{
// Do something
f.RemoveAt[i];
}