如何删除异常,System.InvalidOperationException?

时间:2010-01-01 10:39:23

标签: c#

代码如下:

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

1 个答案:

答案 0 :(得分:2)

我怀疑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个元素开头的队列。不是这种情况。队列最初是空的。为队列构造函数提供容量只是性能优化,并不是严格需要的。

您的代码的另一个问题:您应该使用某种Point类和Queue<Point>,而不是拥有两个队列,一个用于x,一个用于y。这简化了代码并消除了两个队列变得不同步时可能出现的错误。