0

オブジェクト FileInfo[] にファイルの配列があります。

私のサービスでは、現在ファイルをループして処理しています。

ファイルをループして、処理中にコレクションから削除したい。

これにはキューが理想的だと思いますが、キュー コレクションをループするにはどうすればよいですか?

(これまで C# でキューを使用したことがありません)

4

5 に答える 5

2
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'
    }
}
于 2009-02-18T15:49:08.120 に答える
1

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>ます。)

于 2009-02-18T15:48:04.067 に答える
1

キューを使用すると、アイテムを処理するときにキューからアイテムをポップします。

while (queue.Count > 0) {
  T item = queue.Dequeue()
  ProcessItem(item)
}

また、queue は IEnumberable を実装しているため、foreach も使用できますが、(一般に) 列挙しているコレクションを変更することはできません。

于 2009-02-18T15:48:36.047 に答える
1
Queue<FileInfo> q = new Queue<FileInfo>(yourFileInfoArray);

while (q.Count > 0)
{
    FileInfo fi = q.Dequeue();
    // do stuff with fi
}
于 2009-02-18T15:50:06.277 に答える
1

これを行うもう 1 つの方法は、単純に FileInfo 配列を逆方向に繰り返し処理し、各要素をポップすることです。

FileInfo[] f = ... 

for(int i = f.Length - 1; i >= 0; i--)
{
   // Do something
   f.RemoveAt[i];
}
于 2009-02-18T15:51:19.143 に答える