- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:delegateの配列)
並列計算でのIndexOutOfRangeExceptionエラーの対処法
このQ&Aのポイント
- 質問で述べられているコードでは、並列計算を行う際にIndexOutOfRangeExceptionのエラーが発生しています。
- このエラーの原因は、actions[i]の初期化部分であり、順番に初期化を行うことで解決することができます。
- しかし、初期化を手動で変更するのは手間がかかり、ミスの原因となります。対処法としては、動的に初期化する方法があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
キャプチャの範囲の問題です。 actions[i]に代入されるラムダ式は,「i」をキャプチャします。 # iの値ではないことに注意。 結果として,ループを抜けたときに,iの値はparallelに等しくなります。 値をキャプチャすることはできませんが,forスコープ中で新たに変数を導入することで, 作ったときのiの値を使うことができます。 for (int i = 0; i < parallel; i++) { var j = i; // iの値を取得する。 data.Add(new List<int>()); actions[j] = () => { for (int b = j; b <= number; b += parallel) data[j].Add(b*b); }; }
お礼
なるほど、そんな解決策があったんですね!助かりました、ありがとうございました!