首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LIST<> AddRange投掷ArgumentException

LIST<> AddRange投掷ArgumentException
EN

Stack Overflow用户
提问于 2010-04-07 14:28:46
回答 2查看 8.3K关注 0票数 9

我有一个特定的方法,它偶尔会与ArgumentException崩溃:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
List<MyType> objects = new List<MyType>(100);
objects = FindObjects(someParam);
objects.AddRange(FindObjects(someOtherParam);

根据MSDN,List<>.AddRange()应该根据需要自动调整自身大小:

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

有人能想到AddRange可以抛出这种异常的情况吗?

编辑:

以回答有关FindObjects()方法的问题。基本上是这样的:

代码语言:javascript
复制
List<MyObject> retObjs = new List<MyObject>();

foreach(MyObject obj in objectList)
{
   if(someCondition)
       retObj.Add(obj);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-07 14:31:00

您是否试图从多个线程中更新相同的列表?可能会引起问题..。对于多个作者来说,List<T>并不安全。

票数 21
EN

Stack Overflow用户

发布于 2010-04-07 14:32:59

老实说,我不确定,但是为什么不直接删除列表初始化中的size声明呢?

代码语言:javascript
复制
List`<MyType>` list = new List`<MyType>`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2593267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档