无法使用.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正在工作,但是您要传递的项目没有通过与列表中任何项目的相等性测试。
通过提供对象来删除将尝试测试该项与列表中所有项的相等性(通常通过.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;