[英]how to remove the exception, System.InvalidOperationException?
代码如下
Queue<int> queXpTrackerX = new Queue<int>(10);
Queue<int> queXpTrackerY = new Queue<int>(10);
if (iCounterForXpTrack < 10)
{
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
iCounterForXpTrack++;
}//End IF
else
{
queXpTrackerX.Dequeue();
queXpTrackerY.Dequeue();
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}//End else
for (int indexXp = 0; indexXp < iCounterForXpTrack; indexXp++)
{
gXpTracker.DrawEllipse(Pens.Cyan, queXpTrackerX.ElementAt(indexXp) , queXpTrackerY.ElementAt(indexXp), 5, 5);
}//end for
我怀疑最可能导致您InvalidOperationException的原因是尝试从队列为空时使其出队。 您有异常消息吗? 是“队列为空”吗?
如果您的iCounterForXpTrack
与队列中的元素数量不同步,则会发生这种情况。 最好直接询问队列以避免这种可能的错误:
if (queXpTrackerX.Count < 10)
{
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}
else
{
queXpTrackerX.Dequeue();
queXpTrackerY.Dequeue();
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}
代码失败的可能原因是,如果您将iCounterForXpTrack
初始化为10,并认为new Queue<int>(10)
创建了一个以10个元素开头的队列。 不是这种情况。 队列最初是空的。 向队列构造函数提供容量仅仅是性能优化,并非严格要求。
代码的另一个问题:不要使用两个队列,一个用于x,一个用于y,而应该使用某种Point类和一个Queue<Point>
。 这简化了代码,并消除了两个队列不同步的可能错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.