У меня есть определенный метод, который иногда дает сбой с 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<MyType> objects = new List<MyType>(100);
objects = FindObjects(someParam);
objects.AddRange(FindObjects(someOtherParam);
Согласно MSDN, List <>. AddRange () должен автоматически изменять свой размер при необходимости:
Если новый счетчик (текущий счетчик плюс размер коллекции) будет больше, чем Capacity, емкость списка <(Of <(T>)>) увеличивается за счет автоматического перераспределения внутреннего массива для размещения новых элементов, а существующие элементы копируются в новый массив перед добавлением новых элементов.
Может ли кто-нибудь придумать обстоятельства, при которых AddRange может выдать исключение такого типа?
Edit:
В ответ на вопросы о методе FindObjects (). В основном это выглядит примерно так:
List<MyObject> retObjs = new List<MyObject>();
foreach(MyObject obj in objectList)
{
if(someCondition)
retObj.Add(obj);
}