2011-12-07 57 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); 
    } 
}