Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除异常System.InvalidOperationException?_C# - Fatal编程技术网

C# 如何删除异常System.InvalidOperationException?

C# 如何删除异常System.InvalidOperationException?,c#,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+

代码如下所示

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
Queue queXpTrackerX=新队列(10);
Queue queXpTrackerY=新队列(10);
如果(iCounterForXpTrack<10)
{
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
iCounterForXpTrack++;
}//如果结束
其他的
{
queXpTrackerX.Dequeue();
queXpTrackerY.Dequeue();
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}//结束其他
对于(int indexXp=0;indexXp
我怀疑您的InvalidOperationException最可能的原因是当队列为空时试图从队列中退出。你收到异常消息了吗?是“队列为空”吗

如果您的
iCounterForXpTrack
与队列中的元素数量不同步,则可能发生这种情况。最好直接询问队列以避免此可能的错误:

    if (queXpTrackerX.Count < 10)
    {
        queXpTrackerX.Enqueue(X);
        queXpTrackerY.Enqueue(Y);
    }
    else
    {
        queXpTrackerX.Dequeue();
        queXpTrackerY.Dequeue();
        queXpTrackerX.Enqueue(X);
        queXpTrackerY.Enqueue(Y);
    }
if(queXpTrackerX.Count<10)
{
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}
其他的
{
queXpTrackerX.Dequeue();
queXpTrackerY.Dequeue();
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}
代码失败的一个可能原因是,如果您将
iCounterForXpTrack
初始化为10,认为
newqueue(10)
创建了一个以10个元素开头的队列。事实并非如此。队列最初为空。为队列构造函数提供容量只是一种性能优化,并不是严格需要的


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

请不要在块的末尾写“//end if”和“//end for”。它使代码变得混乱,不需要理解正在发生的事情。另外,它没有经过编译检查。即使有这些评论,我也不会相信,除非我自己检查一下。你能告诉我们例外的信息吗?InvalidOperationException在.NET Framework中广泛使用。我从代码中猜测它是“队列空的”。@Mark,如果我问你,“请不要在局部变量前面加下划线,我不喜欢它”,会怎么样?你必须承认用C代码编写VB代码注释是疯狂的,至少成员变量中的下划线可以重构。