Виберіть потрібні елементи , а не намагайтеся видалити елементи, які ви не хочете. Це набагато простіше (і взагалі більш ефективно), ніж видаляти елементи.
var newSequence = (from el in list
where el.Something || el.AnotherThing < 0
select el);
Я хотів опублікувати це як коментар у відповідь на коментар, залишений Майклом Діллоном нижче, але це занадто довго і, напевно, корисно мати у своїй відповіді все одно:
Особисто я ніколи не видаляв елементи один за одним, якщо вам потрібно видалення, тоді дзвоніть, RemoveAll
який має предикат і лише один раз переставляє внутрішній масив, тоді як Remove
виконує Array.Copy
операцію з кожним видаленим вами елементом. RemoveAll
набагато ефективніше.
І коли ви переймете назад за списком, у вас вже є індекс елемента, який ви хочете видалити, тому було б набагато ефективніше дзвонити RemoveAt
, оскількиRemove
спочатку робиться обхід списку, щоб знайти індекс елемента, який ви Ви намагаєтесь видалити, але ви вже знаєте цей індекс.
Так що загалом я не бачу причин ніколи телефонувати Remove
в циклі for. І в ідеалі, якщо це взагалі можливо, використовуйте вищевказаний код, щоб струмувати елементи зі списку за необхідністю, щоб взагалі не створювати другу структуру даних.