如何检查队列是否为空?

MoS*_*She 35 c# queue is-empty

在C#中,如何检查队列是否为空?

我想遍历Queue的元素,我需要知道何时停止.我怎么能做到这一点?

Jon*_*eet 43

假设你的意思是Queue<T>可以使用:

if (queue.Count != 0)
Run Code Online (Sandbox Code Playgroud)

但为什么要这么麻烦?无论如何只是迭代它,如果它是空的,你永远不会进入身体:

Queue<string> queue = new Queue<string>();

// It's fine to use foreach...
foreach (string x in queue)
{
    // We just won't get in here...
}
Run Code Online (Sandbox Code Playgroud)

  • 注意,如果您在处理队列时需要向队列添加任何项目(例如,如果您正在实施BFS算法),则foreach方法不起作用,因为那时枚举器将失效.使用Count属性是此方案的正确方法. (43认同)

Gre*_*rad 21

我建议使用Any()方法,因为这不会对整个队列进行计数,这在性能方面会更好.

Queue myQueue = new Queue();
    if(myQueue.Any()){
      //queue not empty
    }
Run Code Online (Sandbox Code Playgroud)

  • @GregoryBad:`myQueue.Count`不会对整个队列进行计数.大小存储在Queue类中的一个私有变量中,Count属性只返回[Queue <T> .Count属性](http://msdn.microsoft.com/en-us/library/fy0wwyz4.aspx).你的意思是在linq命名空间中的Count().[Enumerable.Count](http://msdn.microsoft.com/en-us/library/bb338038.aspxt) (14认同)
  • @Rutix即使对Enumerable.Count()方法也进行了优化,以检查它是否可以强制转换为ICollection并返回.Count属性而不进行枚举。 (2认同)
  • @AndrewPalmer 现在确实如此;)。我不知道当我 3 年前发表评论时,优化是否已经到位:)。 (2认同)

vcs*_*nes 8

假设你的意思 System.Collections.Generic.Queue<T>

if(yourQueue.Count != 0) { /* Whatever */ }
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.