Сравнение списков с#

vierasen

Client
Регистрация
10.12.2015
Сообщения
553
Благодарностей
267
Баллы
63
Для теста взял два списка с абсолютно одинаковым содержанием, около 50 элементов. По идее должно работать так: если элемент из первого списка присутствует во втором списке, то он удаляется. На практике удалилось при тесте, ровно половина элементов, причем через 1, т.е. 1й удалился, 2й остался. Где может быть допущена ошибка?

Код:
var postlist = project.Lists["list1"];
var postlistnow = project.Lists["list2"];
lock (SyncObjects.ListSyncer)
{
for (int i=0; i < postlist.Count; i++)
{
  
    var firstlist = postlist[i];
    if (postlistnow.Contains(firstlist))
    {
    postlist.RemoveAt(i);
    }
}
}
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 706
Баллы
113
в том что считаете от начала к концу, а список уменьшается
нужно обратно считать: от количества строк списка до 0
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
Так попробуйте.

Код:
var postlist = project.Lists["list1"];
var postlistnow = project.Lists["list2"];
lock (SyncObjects.ListSyncer)
{
int count = postlist.Count;
for (int i=0; i < count; i++)
{
    var firstlist = postlist[i];
    if (postlistnow.Contains(firstlist))
    {
    postlist.RemoveAt(i);
    count --;
    i--;
    }
}
}
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)