Лучшее решение обычно заключается в использовании метода RemoveAll()
:
myList.RemoveAll(x => x.SomeProp == "SomeValue");
Или, если вам нужно определенных удаленных элементов:
MyListType[] elems = new[] { elem1, elem2 };
myList.RemoveAll(x => elems.Contains(x));
Это предполагает, что ваша петля предназначена исключительно для целей удаления, конечно.Если вам делать нужна дополнительная обработка, то лучшим способом обычно является использование цикла for
или while
, поскольку тогда вы не используете перечислитель:
for (int i = myList.Count - 1; i >= 0; i--)
{
// Do processing here, then...
if (shouldRemoveCondition)
{
myList.RemoveAt(i);
}
}
Переход назад гарантирует, что вы не пропустите никаких элементов.
Ответ на редактирование :
Если вы собираетесь удалить, казалось бы, произвольные элементы, самый простой способможет быть, просто отслеживать элементы, которые вы хотите удалить, а затем сразу же удалить их все.Как то так:
List<int> toRemove = new List<int>();
foreach (var elem in myList)
{
// Do some stuff
// Check for removal
if (needToRemoveAnElement)
{
toRemove.Add(elem);
}
}
// Remove everything here
myList.RemoveAll(x => toRemove.Contains(x));