• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:delegateの配列)

並列計算でのIndexOutOfRangeExceptionエラーの対処法

このQ&Aのポイント
  • 質問で述べられているコードでは、並列計算を行う際にIndexOutOfRangeExceptionのエラーが発生しています。
  • このエラーの原因は、actions[i]の初期化部分であり、順番に初期化を行うことで解決することができます。
  • しかし、初期化を手動で変更するのは手間がかかり、ミスの原因となります。対処法としては、動的に初期化する方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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);  }; }

selpo
質問者

お礼

なるほど、そんな解決策があったんですね!助かりました、ありがとうございました!

関連するQ&A