FileInfo [] массив, хотите добавить его в очередь, чтобы каждый файл обрабатывался только один раз и удалялся - PullRequest
0 голосов
/ 18 февраля 2009

У меня есть массив файлов в объекте FileInfo [].

В моем сервисе я в настоящее время перебираю файлы и обрабатываю их.

Я хочу просмотреть файлы и удалить их из коллекции по мере их обработки.

Я думаю, что для этого идеально подходит очередь, но как мне перебрать коллекцию очередей?

(никогда ранее не использовал очереди в C #)

Ответы [ 5 ]

2 голосов
/ 18 февраля 2009
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'
    }
}
1 голос
/ 18 февраля 2009

Другой способ сделать это - просто перебрать массив FileInfo в обратном направлении и вытолкнуть каждый элемент.

FileInfo[] f = ... 

for(int i = f.Length - 1; i >= 0; i--)
{
   // Do something
   f.RemoveAt[i];
}
1 голос
/ 18 февраля 2009
Queue<FileInfo> q = new Queue<FileInfo>(yourFileInfoArray);

while (q.Count > 0)
{
    FileInfo fi = q.Dequeue();
    // do stuff with fi
}
1 голос
/ 18 февраля 2009

С помощью очереди извлекайте элементы из очереди по мере их обработки.

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

Также в очереди реализован IEnumberable, поэтому вы также можете использовать foreach, но (в общем случае) вы не можете изменять перечисляемую коллекцию.

1 голос
/ 18 февраля 2009

Итерация по очереди выполняется так же, как и по большинству других коллекций в 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>.)

...