Невозможно удалить элемент с помощью .Remove - PullRequest
0 голосов
/ 27 октября 2011

Я пытаюсь удалить элемент из массива, но элемент не удаляется, я не получаю никакой ошибки удалить не работает.

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

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Удалить работает, но передаваемый вами элемент не проходит тесты на равенство ни с одним элементом в списке.

При удалении с помощью объекта будет пытаться проверить равенство (обычно через .Equals()) этогоэлемент со всеми элементами в списке, пока один не найден, затем он удаляется.Если он не найдет ничего, он не вызовет исключение.

0 голосов
/ 31 октября 2011

Адам Хоулсворт говорит, что пиши, но я сделал по-другому, и мой код ниже

Я удалил 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;
0 голосов
/ 27 октября 2011

ImgArry - локальная переменная, ссылочный тип. Поскольку поведение по умолчанию для ссылочных типов для Equals() действительно равно ReferenceEquals(), вы не можете этого достичь, поскольку только что созданный вами экземпляр не может быть помещен в ваш контейнер.

Вы должны сначала найти предмет, который не хотите удалить. Например. : t.Find(a => a[0] == SelImgId)

Тогда вы можете t.Remove() ранее возвращенный товар.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...