Итерация по массиву и удаление объекта

Название говорит само за себя, у меня возникли некоторые проблемы с перебором созданного мной массива (песен) и удалением определенной песни, как только она будет найдена. Я подтвердил, что места указаны правильно, и попытался вручную ввести местоположение песни, но безрезультатно.

    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 улучшить производительность, если вы уверены, что будет только одно подходящее местоположение

Другие вопросы по тегам