我有一个简单的队列来管理添加到我的应用程序中的项目.
来自Microsoft目前的Queue.Peek方法文档:

我认为Peek()的重点是拥有不会产生异常的代码.
Tim*_*ter 10
甚至MSDN都提到了原因:
null可以作为值添加到Queue中.要区分null值和Queue的结尾,请检查Count属性或捕获InvalidOperationException,它在Queue为空时抛出.
因此,如果你试图查看第一个项目,队列抛出异常的原因是它可能是null.您想如何区分有效值null和没有项目?
如果队列包含值类型,则同样如此int.如果没有要查看的项目,它应该返回-1吗?不,-1可能是有效值,因此您不知道队列中是否有其他项目.
而是使用该Count属性检查队列是否为空:
var queue = new Queue<int>();
queue.Enqueue(-1);
while (queue.Count > 0)
{
int current = queue.Peek(); // still in the queue
Console.WriteLine(queue.Dequeue()); // now empty
}
Run Code Online (Sandbox Code Playgroud)
我假设你对这样queue.Peek的方法感到困惑dataReader.Read.不同之处在于Read将读者推进到下一个记录并返回一个bool指示是否有记录的记录.Queue.Peek也返回"记录".这是一个不同的目的,所以Peek如果你想知道是否有一个,请不要使用.
顺便说一句,这种行为在框架中是一致的.如果你在空序列中使用它们,其他方法 Enumerable.First也会抛出 InvalidOperationException.
| 归档时间: |
|
| 查看次数: |
5602 次 |
| 最近记录: |