无法使用.remove删除项目

本文关键字:remove 删除项目 | 更新日期: 2023-09-27 18:12:28

我试图从数组列表中删除项目,但项目没有被删除,我没有得到任何错误删除不工作。

protected void ibtnMoveUp_Click(object sender, ImageClickEventArgs e)
    {
        ArrayList ImgArry = new ArrayList();
        ImgArry.Add(SelImgId);
        ImgArry.Add(SelImgpath);//image name
        ImgArry.Add(SelImgName);//image path
        List<int> t1 = new List<int>();
        if (Imgarry1 != null)
            t1 = Imgarry1;//Imaarry1 is the type List<int>
        t1.Add(Convert.ToInt32(ImgArry[0]));
        Imgarry1 = t1;
        List<ArrayList> t = new List<ArrayList>();
        if (newpath.Count > 0)// newpath is the type List<ArrayList> nd creating the viewstate
            t = newpath;
        t.Remove(ImgArry);//Item is not getting remove
        newpath = t;
        for (int i = 0; i < newpath.Count; i++)
        {
            ArrayList alst = newpath[i];
            newtb.Rows.Add(Convert.ToInt32(alst[0]), alst[1].ToString(), alst[2].ToString(), i);
        }
        dlstSelectedImages.DataSource = newtb;
        DataBind();
}

无法使用.remove删除项目

Remove正在工作,但是您要传递的项目没有通过与列表中任何项目的相等性测试。

通过提供对象来删除将尝试测试该项与列表中所有项的相等性(通常通过.Equals()),直到找到一个,然后将其删除。如果没有找到,则不会导致异常。

ImgArry是一个局部变量,引用类型。由于Equals()的引用类型的默认行为确实是ReferenceEquals(),因此您无法实现它,因为您刚刚创建的实例无论如何都不能放在容器中。

你必须先搜索你不想删除的项目。例:t.Find(a => a[0] == SelImgId)

然后您可以t.Remove()先前返回的项。

Adam houdsworth说写,但我用了一些不同的方法,我的代码在下面

我已经删除了t.Remove(ImgArry);这一行加上

             List<ArrayList> temp = new List<ArrayList>(t.Count);
                for (int i = 0; i < t.Count; i++)
                {
                    ArrayList al = t[i];
                    if (Convert.ToInt32(al[0]) != Convert.ToInt32(ImgArry[0]))
                        temp.Add(al);
                }
                t = temp;