с использованием LINQ или лямбда-выражения будут довольно простым решением этой проблемы.
Интерфейс IEnumerable (Of T) содержит метод, называемый RemoveAll
. Эта функция может показаться немного сложной, потому что она принимает довольно неприятный параметр, но на самом деле это не так плохо, как кажется.
Таким образом, параметр, переданный в RemoveAll
, может быть анонимной функцией или адресом функции. Для этого случая анонимная функция - путь.
Чтобы удалить все объекты из списка строк, где выполняется условие вы можете использовать:
list.RemoveAll(Function(o) o="0")
Эта короткая строка кода фактически делает довольно много вещей. Сначала он создает анонимную функцию, которая принимает строку как параметр и возвращает результат сравнения этой строки с литералом «0». Далее функция RemoveAll
использует эту анонимную функцию для оценки всех членов list
и удаляет объект, если анонимная функция оценивает значение true.
Альтернатива:
тот же код может быть сделано с помощью указателя функции. Этот метод дает немного больше кода, но позволяет сделать намного больше в вашей логике сравнения, чем просто сравнивать каждое значение с литералом.
Мы по-прежнему вызываем функцию remove all, как и раньше, но на этот раз мы передаем адрес функции, которая имеет подпись, похожую на Public Function <FunctionName>(byval Param As String) As Boolean
, если подпись не соответствует, тогда вы получите сообщение об ошибке.
List.RemoveAll(AddressOf TestFunction)
Далее мы определяем функцию в другом месте программы.
Public Function TestFunction(ByVal item As String) As Boolean
return item = "0"
End Function
вы можете переключить его на время цикла и только увеличиваем свой контур управления, если вы НЕ удалить из списка. –