加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 调用.ToArray()时的ArgumentException

发布时间:2020-12-16 01:36:51 所属栏目:百科 来源:网络整理
导读:我有一个列表,每隔一段时间就清除一次.代码完全如下: VisitorAgent[] toPersist;ListVisitorAgent v = (ListVisitorAgent)state;lock (v){ toPersist = v.ToArray(); v.Clear();}//further processing of toPersist objects 今天我得到了一个Argument异常,
我有一个列表,每隔一段时间就清除一次.代码完全如下:

VisitorAgent[] toPersist;
List<VisitorAgent> v = (List<VisitorAgent>)state;

lock (v)
{
   toPersist = v.ToArray();                       

   v.Clear();
}

//further processing of toPersist objects

今天我得到了一个Argument异常,除非有内存问题,否则对我没有意义.但如果是这样的话,为什么不是OOM例外呢?调用ToArray()时可能导致此异常的原因是什么?

System.ArgumentException: Destination array was not long enough. Check destIndex and 
length,and the array's lower bounds.

我正在使用.NET 3.5& C#.

解决方法

这只是尖叫竞争条件(锁定声明是第一个线索).

我猜其他一些代码(在另一个线程中)已添加到List< T>在它分配目标数组之后但在它复制它之前.

我要做的第一件事是仔细检查每个可能的状态列表访问是否正确包装在一个锁定语句中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读