Как вы находите индекс с условными обозначениями, такими как && - PullRequest
0 голосов
/ 13 декабря 2011

Допустим, у вас есть список l_mur = new List ();

И вы заполняете список.

Затем, исходя из условий, вы хотите УДАЛИТЬ некоторые значения без запроса ...

l_mur.RemoveAt(l_mur.FindIndex(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid)));

Однако код, который я здесь использовал, похоже, не работает. Он показывает мне индекс вне диапазона, но как он может быть вне диапазона, если я просто ищу что-то, что действительно существует.

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

List<T>.FindIndex() возвращает -1 в случае, если не найдено совпадений - что выходит за пределы диапазона List<T>.RemoveAt().

Также обратите внимание, что FindIndex() возвращает только индекс first вхождение на основе вашего предиката - если имеется более одного совпадения, вы сможете удалить только первое из них с использованием вашего текущего подхода.

Более эффективный подход для удаления на месте на основе предикатабыть RemoveAll():

l_mur.RemoveAll(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid));
1 голос
/ 13 декабря 2011

Может быть хорошей идеей будет отфильтровать список к новому экземпляру списка:

var l_mur = l_mur.Where(f => (f.xid != tmur.xid || f.sid != tmur.sid || f.mid != tmur.mid || f.bid != tmur.bid));
0 голосов
/ 13 декабря 2011

Используйте этот код:

l_mur.Remove(l_mur.Find(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...