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

vierasen

Client
Регистрация
10.12.2015
Сообщения
588
Благодарностей
279
Баллы
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 719
Баллы
113
в том что считаете от начала к концу, а список уменьшается
нужно обратно считать: от количества строк списка до 0
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 452
Благодарностей
1 888
Баллы
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)