У меня есть универсальный список, что я удаляю объекты из использования List.Remove(Object)
. Я удалял объекты, но каждый раз, когда я добираюсь до пятого объекта, я удаляю его сбои и не удаляю его из списка. Это, кажется, не имеет значения, что я удаляю, но каждый раз я пытаюсь удалить пять объектов, которые это приводит к сбою на пятом объекте.
Что могло вызывать это? Рассмотрение документации для List(Of T).Remove
, это не указывает, какой алгоритм они используют для удаления объекта.
Remove
будет соответствовать на основе вызова .Equals
для ваших объектов. По умолчанию для данного объекта он будет соответствовать только тому же объекту . Если вы хотите, чтобы два объекта с одинаковыми свойствами считались равными, даже если они не являются одним и тем же объектом, вам необходимо переопределить метод Equals
и поместить туда свою логику.
Однако есть еще один хороший вариант заключается в использовании RemoveAll
и передаче анонимного делегата или лямбда-выражения с критериями, которые вы ищете. Например:
customers.RemoveAll(customer => customer.LastName.Equals(myCustomer.LastName));
Конечно, это работает только в том случае, если вы действительно хотите удалить все совпадающие элементы и / или если вы уверены, что найдется только один подходящий.
If you are using an indexed based method to remove items from the list and remember that the indexes of items after the one you remove will change by -1 as you remove the ones before it.
How many items are in your list? How are you removing them, just looping through? Keep in mind these are 0-based lists. If you're doing any sort of For loop with an integer it may not work as you're removing items.
If you are using for loop to remove elements, you should consider using the foreach, it is more suitable for collections, lists and numerable objects