私の友人のコードでは、彼はList
:
List<int> listOfIds = new List<int>();
次にAddRange()
、intのコレクションを追加していました。
listOfIds.AddRange(this._employeeList
.Where(r => r.EmployeeID != null)
.Select(r => r.EmployeeID != null ? r.EmployeeID.Value : 0));
しかし、その後、ログには次のように書かれています。
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
at the method which called the codes above.....
なぜこれが起こったのかよくわかりません。このエラーは上記のコードで発生したと確信していますが、なぜ発生するのか理解できないようですIndexOutofRangeException
。
これを引き起こす可能性のあるものを指摘するのを手伝ってもらえますか?
アップデート:
私は間違っています。大変申し訳ございません。このメソッドはマルチスレッドを使用しません。しかし、このメソッドを呼び出した別のメソッドは、マルチスレッドを意味するParallel.Foreachを使用しています。_employeeListがAddRange()のソースとして使用されているときに、別のスレッドもそれを変更している可能性があります。したがって、addrange()がスレッドセーフではないという答えはもっともらしいです。どうもありがとうございました。