Итерация по массиву и удаление объекта
Название говорит само за себя, у меня возникли некоторые проблемы с перебором созданного мной массива (песен) и удалением определенной песни, как только она будет найдена. Я подтвердил, что места указаны правильно, и попытался вручную ввести местоположение песни, но безрезультатно.
Sub delete(location As String)
Dim tempS As Song
For Each tempS In songs
If tempS.getLocation().toLower().Equals(location) Then
songs.Remove(tempS)
End If
Exit For
Next
End Sub
Этот проект все еще находится на начальной стадии, и единственная вещь, с которой песня связана с самим собой, это ее сохраненное местоположение (например, C:\Music\Albums\Once\Nemo.mp3). Большое спасибо!
1 ответ
В вашем коде есть пара проблем.
Во-первых, вы не сравниваете один и тот же случай, потому что у местоположения нет.ToLower() после него.
Во-вторых, вы потенциально удаляете элемент из своего списка, продолжая итерацию по нему. Это может вызвать проблемы.
Вы можете значительно улучшить это, используя linq. Таким образом, вы можете сделать все это в одну строку:
Public Sub DeleteByLocation(location As String)
songs.RemoveAll(Function(x) x.GetLocation().Equals(location, StringComparison.OrdinalIgnoreCase))
End Sub
+ Изменить RemoveAll
в Remove
улучшить производительность, если вы уверены, что будет только одно подходящее местоположение