我有两个队列,假设为A和B,我在上面执行以下算法:
while (queueA.Count > 0)
{
var elemA = queueA.Peek();
var elemB = queueB.Peek();
if (AreSimilar(elemA, elemB))
{
Debug.Assert(elemA.SomeProperty == elemB.SomeProperty);
queueA.Dequeue();
queueB.Dequeue();
}
else
{
break;
}
}
有些东西告诉我这段代码可以更简洁; Peek() 和 Dequeue() 可以合并为一个操作,因为 Dequeue() 返回的元素与 Peek() 相同,if 语句可能会与 while 语句融合在一起,避免显式 break。我只是没有看到如何完全保留相同的行为,即除非满足“if”中的条件,否则不想删除元素。
Peek
和Dequeue
不能结合使用,因为它们在不同的条件下执行。 - Ben Voigtif (AreSimilar(queueA.Peek(), queueB.Peek())) {
,但是这样会失去断言的能力。 - cdhowie