Обновленный ответ:
Если нам не разрешено использовать функции RemoveAll
или LINQ, которые делают всю работу за нас, это способ сделать это более «вручную»:
List<Person> newPersons = new List<Person>();
foreach (Person person in persons)
{
if (person.FirstName != "David")
newPersons.Add(person);
}
persons = newPersons();
Создание нового списка очень быстро в .NET. Удаление элементов по одному происходит медленно, потому что сначала каждый элемент для удаления должен быть найден в списке, а затем, когда он удаляется, остальная часть списка должна быть перемещена вверх, чтобы заполнить пробел. Это намного медленнее, чем метод, который я дал выше.
Чтобы сделать операцию удаления еще быстрее, список можно сохранить в отсортированном порядке или сгруппировать по имени. Но тогда первоначальное создание списка будет медленнее.
Старый ответ:
Кажется, вы заинтересованы в кратком решении, а не в оптимальном. Если вы используете .NET 3.5, вы можете использовать это:
persons = persons.Where(person => person.FirstName != "David").ToList();
Да, и у List есть метод RemoveAll:
names.RemoveAll(person => person.FirstName == "David");
(Примечание Джимми опубликовал идею RemoveAll
до того, как я это сделал.)