在for循环

时间:2017-05-24 08:45:07

标签: c# nullreferenceexception

我有一个管理任务的系统,在一夜之间运行后回到了NullReferenceException; "对象引用未设置为对象的isntance。"

我已经阅读了其他一半的NullReferenceException SO帖子,似乎没有人分享我的问题。在崩溃之前,系统运行完全正常8小时,而调试我可以看到引发异常的行的本地,并且没有任何内容为null。这是一些代码

if (ackList.Count > 0)
{
    for (int i = 0; i < ackList.Count; i++)
    {
        if ((t.taskID == ackList[i].taskID) && (ackList[i].associatedFile != null)) //exception raised on this line
        {
            //process task as complete
            //Locals as below:
            //t.taskID = 68941
            //i = 30840
            //ackList.Count = 30841
            //ackList[i].taskID = 68941
            //ackList[i].associatedFile = {TaskACKAssociatedFile[1]}
        }
    }
}

我从前一个dev继承了这个代码,然后循环是一个foreach,当循环运行期间ackList增加时,它会崩溃; ackList存储所有确认消息,并填充在不同的线程中。

异常是从if语句引发的,其中至少在这种情况下没有空值。

编辑:我认为这不是What is a NullReferenceException, and how do I fix it?的完全重复。我的所有对象都已启动,并且所使用的所有对象都不为null。这个问题是询问NRE是什么,我很害羞地知道,并且没有任何答案,即使是那个令人难以置信的彻底的答案,也无助于我。

1 个答案:

答案 0 :(得分:0)

t 为空,或 ackList [i] 为空。

那个 ackList 对象。这只是一个假设,但是否有可能在另一个线程上的其他地方进行更改?

如果是这样,请尝试使用 lock 以避免此类并发问题。 看看here