我正在尝试从arraylist中删除该项目,但项目没有被删除,我没有得到任何错误删除不起作用。
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();
}
答案 0 :(得分:1)
删除工作正常,但您传递的项目未通过与列表中任何项目的相等测试。
通过提供对象进行删除将尝试使用列表中的所有项目测试该项目的相等性(通常通过.Equals()
),直到找到一个项目,然后将其删除。如果找不到,则不会导致异常。
答案 1 :(得分:0)
ImgArry
是一个局部变量,引用类型。由于Equals()
的引用类型的默认行为确实是ReferenceEquals()
,因此您无法实现它,因为您刚创建的实例无论如何都无法放入容器中。
您必须首先搜索您要删除的项目。例如。 :t.Find(a => a[0] == SelImgId)
然后您可以t.Remove()
之前返回的项目。
答案 2 :(得分:0)
亚当·赫尔德斯沃思(Adam Houldsworth)在说写作,但我已经采取了一些不同的方式,而我的代码正在下面
我删除了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;