首页 > 解决方案 > 出列整个队列

问题描述

如何使队列中的所有值出列?在下面的代码中,当我尝试这样做时,循环在中间停止。我不明白。

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

标签: c#

解决方案


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());
}

推荐阅读