2011-12-07 53 views
0

我正在学习C#并遇到传递引用的问题。为什么我得到这个NullReferenceException?

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。我错过了什么?

+0

很有可能是因为'pl2'的第k个元素为空......这是否发生在每次迭代?如果不是,抛出时'k'的值是多少? –

+1

使用调试器? –

+0

在行上添加一个断点,并在每一步检查'pl2 [k]'和'tmpNewEntry'的值。也许你正在'countWithStepActivation'方法中将'null'赋值给'tmpNewEntry'? – Otiel

回答

2

您的问题是

pl2[k].changeEntry(.... 

你肯定pl2[k]不是NULL是一个数组或列表元素?

1

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

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

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); 
    } 
}