gpt4 book ai didi

c# List 不添加项目

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:02 24 4
gpt4 key购买 nike

解决方案:对该方法进行了多次调用,因此调用删除的次数超过了现有项的次数。

在我的程序中,我需要从列表中删除项目。但是一旦我进入 RemoveAt() 命令,我得到一个 ArgumentOutOfRangeException,它告诉我我所有的列表的计数都是 0,或者换句话说,都是空的。但是,尽管它说它们是空的,但对象已创建并且所有方法和事件都运行良好。这是我的部分代码:

我的 list :

        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);

steuern.ElementAt(nextSet).eventDisconnectAblauf += this.disconnectAblauf;

nextSet++;
}

我(尝试)删除项目的部分是这样的:

public void disconnectAblauf(object sender, EventArgs e) {
SteuernArgs es = (SteuernArgs)e;
int index = es.index;
int indexbefore = index;
indexbefore--;
int indexafter = index;
indexafter++;
if (index > 0 && nextSet > (indexafter))
{
measure.ElementAt(indexbefore).eventNextMeasure += measureReflector.ElementAt(indexafter).reflectEvent;
steuern.ElementAt(indexbefore).eventNextSteuern += steuernReflector.ElementAt(indexafter).reflectEvent;
}
else if (index == 0 && nextSet > (indexafter)) {
timingMessen.eventRefreshData += measureReflector.ElementAt(indexafter).reflectEvent;
timingMessen.eventRefreshData -= measureReflector.ElementAt(index).reflectEvent;
timingSteuerung.eventRefreshSteuerung += steuernReflector.ElementAt(indexafter).reflectEvent;
timingSteuerung.eventRefreshSteuerung -= steuernReflector.ElementAt(index).reflectEvent;
}


steuernReflector.RemoveAt(index);
steuern.RemoveAt(index);
measure.RemoveAt(index);
measureReflector.RemoveAt(index);
model.RemoveAt(index);

我已经尝试了很多东西,所以可能会有一些注释行或“无用”行,请尽量忽略它们,谢谢!

编辑:

(在我看来)相关代码的精简版:

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);


EventReflector ers = new EventReflector();
EventReflector erm = new EventReflector();
steuernReflector.Add(ers);
measureReflector.Add(erm);

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);

steuernReflector.RemoveAt(index);
steuern.RemoveAt(index);
measure.RemoveAt(index);
measureReflector.RemoveAt(index);
model.RemoveAt(index);

最佳答案

我认为问题在于您将索引存储在 Index 属性中。假设集合中有三个项目,首先删除索引为 0 的项目。这将缩短 List 并且 Index 属性为 2 的项目将移动到索引 1 . 然而,这意味着如果您现在运行 remove 方法,该项目将不再位于位置 2 并且尝试访问它将会抛出 ArgumentOutOfRangeException

关于c# List 不添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51357770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com