解决方案:多次调用该方法,因此调用 remove 的次数多于现有项目。在我的程序中,我需要从列表中删除项目。但是一旦我使用 RemoveAt() 命令,我就会得到一个 ArgumentOutOfRangeException,它告诉我我的所有列表的计数都是 0,或者换句话说,都是空的。但是尽管它说它们是空的,但对象已创建并且所有方法和事件都运行良好。这是我的代码的一些部分:我的清单: measure = new List<Messen>(maxAblaufe); steuern = new List<Steuern>(maxAblaufe); model = new List<Model>(maxAblaufe); measureReflector = new List<EventReflector>(maxAblaufe); steuernReflector = new List<EventReflector>(maxAblaufe);创建列表: if (nextSet < maxAblaufe) { neuerAblauf na = new neuerAblauf(); na.Show(); //if (model.Count == nextSet) model.Add(new Model()); na.Model = model.ElementAt(nextSet); model.ElementAt(nextSet).Index = nextSet; na.eventStartAblauf += this.startAblauf; }和:public void startAblauf(object sender, EventArgs e) { EventReflector ers = new EventReflector(); EventReflector erm = new EventReflector(); steuernReflector.Add(ers); measureReflector.Add(erm); if (nextSet > 0) { measure.ElementAt(nextSet-1).eventNextMeasure += measureReflector.ElementAt(nextSet).reflectEvent; steuern.ElementAt(nextSet-1).eventNextSteuern += steuernReflector.ElementAt(nextSet).reflectEvent; } else if (nextSet == 0) { timingMessen.eventRefreshData += measureReflector.ElementAt(nextSet).reflectEvent; timingSteuerung.eventRefreshSteuerung += steuernReflector.ElementAt(nextSet).reflectEvent; } model.ElementAt(nextSet).MesstabellePath = "C:\\Users\\myuser\\Documents\\Privat\\MessTest\\Messung" + nextSet + ".csv"; Messen mess = new Messen(model.ElementAt(nextSet), myPLC, 60 + nextSet * 20, measureReflector.ElementAt(nextSet)); measure.Add(mess); Steuern str = new Steuern(model.ElementAt(nextSet), steuertakt, myPLC, 60 + nextSet * 20, mess, steuernReflector.ElementAt(nextSet)); steuern.Add(str); }
1 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
我认为问题在于您将索引存储在Index
属性中。假设你有集合中三个项目,并首先你删除与指数0一这将缩短List
和项目用Index
的2属性将移动到索引1。然而,这意味着如果你现在运行remove方法,该项目将不再位于位置 2 并且尝试访问它会抛出ArgumentOutOfRangeException
。
- 1 回答
- 0 关注
- 257 浏览
添加回答
举报
0/150
提交
取消