Вы можете полностью удалить двухэтапный процесс и просто использовать .Remove
, который вернет:
true
, если элемент успешно удален;в противном случае false
.Этот метод также возвращает false
, если элемент не был найден в списке.
Это будет выглядеть следующим образом:
for (int x = 0; x < cars.Count; x++)
{
moscowCars.Remove(cars[x].Name);
}
И если вам нужно обработать случай, когда нет автомобиляЕсли вы обнаружите, что он удален, вы можете заключить этот вызов в состояние if
, например:
for (int x = 0; x < cars.Count; x++)
{
if (!moscowCars.Remove(cars[x].Name))
{
// Handle no cars to remove
}
}
Стоит отметить, что за кадром .Remove
в конечном итоге просто получает индекс, а затем удаляет элемент при этомindex (это то, что вы изначально пытались сделать в любом случае):
public bool Remove(T item) {
int index = IndexOf(item);
if (index >= 0) {
RemoveAt(index);
return true;
}
return false;
}
См. здесь для источника.
В качестве альтернативы, как заявили другие, если вы ожидаете, что список будет содержать больше, чем элемент, который вы хотите удалить, вы можете использовать .RemoveAll
:
moscowCars.RemoveAll(y => y == cars[x].Name);
И снова, для обработки случая, когда ничего не найдено:
if (moscowCars.RemoveAll(y => y == cars[x].Name) == 0)
{
// Handle no cars to remove
}