为什么我会得到这个NullReferenceException?

时间:2011-12-07 21:02:54

标签: c# reference

我正在学习C#并且在传递参考时遇到了问题。

double tmpNewEntry = -1;

for (int k = 0; k < pl2.Length; k++)
{
    p.countWithStepActivation(ref tmpNewEntry);
    // Console.WriteLine("answer = {0} | t = {1} | tmpNewEntry = {2}", p.answer, p.theta, tmpNewEntry);
    pl2[k].changeEntry(k, tmpNewEntry);
}

现在当我取消注释WriteLine()时,我得到了tmpNewEntry的正确结果,但是在下一行:

pl2[k].changeEntry(k, tmpNewEntry); 

我得到 NullReferenceException 。我错过了什么?

3 个答案:

答案 0 :(得分:2)

你的问题是

pl2[k].changeEntry(....

你确定pl2[k]不是NULL,不管是数组还是List元素?

答案 1 :(得分:1)

在收到错误之前,pl2[k]的价值是多少?我打赌它是空的。

我的猜测是.changeEntry引用对c#没有意义,因为对象(pl2[k])为空。

答案 2 :(得分:0)

你可以这样做:

double tmpNewEntry = -1;

for (int k = 0; k < pl2.Length; k++)
{
     p.countWithStepActivation(ref tmpNewEntry);
     // Console.WriteLine("answer = {0} | t = {1} | tmpNewEntry = {2}", p.answer, p.theta, tmpNewEntry);
     if(pl2[k] != null)
     {
         pl2[k].changeEntry(k, tmpNewEntry);
     }
}