c# List 不添加项目

解决方案:多次调用该方法,因此调用 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);

    }


慕侠2389804
浏览 258回答 1
1回答

潇潇雨雨

我认为问题在于您将索引存储在Index属性中。假设你有集合中三个项目,并首先你删除与指数0一这将缩短List和项目用Index的2属性将移动到索引1。然而,这意味着如果你现在运行remove方法,该项目将不再位于位置 2 并且尝试访问它会抛出ArgumentOutOfRangeException。
打开App,查看更多内容
随时随地看视频慕课网APP