LIST AddRange抛出ArgumentException

我有一个特殊的方法偶尔崩溃与ArgumentException:

Destination array was not long enough. Check destIndex and length, and the array's lower bounds.: at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable) at System.Collections.Generic.List`1.CopyTo(T[] array, Int32 arrayIndex) at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) at System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection) 

导致此崩溃的代码如下所示:

 List objects = new List(100); objects = FindObjects(someParam); objects.AddRange(FindObjects(someOtherParam); 

根据MSDN,List 。AddRange()应根据需要自动调整大小:

如果新的Count(当前Count加上集合的大小)将大于Capacity,则通过自动重新分配内部数组以容纳新元素来增加List <(Of )>)的容量,并且在添加新元素之前将现有元素复制到新数组。

有人可以想到AddRange会抛出这种exception的情况吗?


编辑:

回答有关FindObjects()方法的问题。 它基本上看起来像这样:

 List retObjs = new List(); foreach(MyObject obj in objectList) { if(someCondition) retObj.Add(obj); } 

您是否尝试从多个线程更新相同的列表? 这可能会导致问题…… List对多个编写者来说并不安全。

老实说,我不确定,但为什么不删除列表初始化中的大小声明?

 List`` list = new List``