我在对象 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>
。)
使用 Queue 在处理它们时从队列中弹出项目。
while (queue.Count > 0) {
T item = queue.Dequeue()
ProcessItem(item)
}
队列还实现了 IEnumberable,因此您也可以使用 foreach,但(通常)您不能修改您正在枚举的集合。
Queue<FileInfo> q = new Queue<FileInfo>(yourFileInfoArray);
while (q.Count > 0)
{
FileInfo fi = q.Dequeue();
// do stuff with fi
}
另一种方法是简单地向后遍历 FileInfo 数组,然后弹出每个元素。
FileInfo[] f = ...
for(int i = f.Length - 1; i >= 0; i--)
{
// Do something
f.RemoveAt[i];
}