簡體   English   中英

如何刪除異常System.InvalidOperationException?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM