2011-12-07 10 views
0

私はC#を学んでおり、参照を渡すことに問題があります。私はWriteLine()のコメントを解除するときなぜこの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); 
} 

は、今私はtmpNewEntryのための適切な結果を得るが、次の行に:

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

私はとNullReferenceExceptionを取得します。私は何が欠けていますか?

+0

おそらく、 'pl2'のk番目の要素がヌルであるためです...これはすべての繰り返しで発生しますか?もしそうでなければ、それが投げるときに 'k'の値は何ですか? –

+1

デバッガを使用しましたか? –

+0

行にブレークポイントを追加し、すべてのステップで 'pl2 [k]'と 'tmpNewEntry'の値をチェックします。 'countWithStepActivation'メソッドの' tmpNewEntry'に 'null'を代入しているのでしょうか? – Otiel

答えて

2

あなたの問題は

pl2[k].changeEntry(.... 

であるあなたがpl2[k]は、それが配列またはリストの要素でNULLではありませんか?

1

エラーが発生する前にpl2[k]の値は何ですか?私はそれがnullだと思う。

私の推測によれば、.changeEntryの参照は、オブジェクト(pl2[k])がnullであるため、C#には意味がありません。あなたが行うことができます

0

ダブル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); 
    } 
} 
関連する問題