c# - 出列整个队列
问题描述
如何使队列中的所有值出列?在下面的代码中,当我尝试这样做时,循环在中间停止。我不明白。
Queue<int> integers = new Queue<int>();
for (int i = 0; i < 20; i++)
{
integers.Enqueue(i);
}
Console.WriteLine(integers.Count); // 20
Console.WriteLine();
for (int i = 0; i < integers.Count; i++)
{
Console.WriteLine(integers.Dequeue()); // Stops at 10
}
Console.WriteLine();
Console.WriteLine(integers.Count); // 10
解决方案
integers.Count
每次出队时,您都会减少,因此在for
循环十次迭代后,它将为 10,因此循环将退出。
为了使您的代码正常工作,只需在循环之前保存队列的长度,如下所示:
var length = integers.Count;
for (int i = 0; i < length; i++)
{
Console.WriteLine(integers.Dequeue());
}
编辑:上述解决方案对 OP 代码的改动很小。根据评论(和其他答案)中的while
建议,对于此类任务,通常更推荐使用循环:
while (integers.Count != 0) {
Console.WriteLine(integers.Dequeue());
}