1

标题说明了一切,我在遍历我制作的数组列表(歌曲)并在找到特定歌曲后删除它时遇到了一些麻烦。我已确认位置正确,并尝试手动输入歌曲的位置,但无济于事。

    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

这个项目仍处于起步阶段,唯一与歌曲相关的是它的存储位置(ei C:\Music\Albums\Once\Nemo.mp3)。非常感谢!

4

1 回答 1

0

您的代码中有几个问题。

首先,您没有比较相同的情况,因为 location 后面没有 .ToLower() 。

其次,您可能会从列表中删除一个项目,同时仍在迭代它。这可能会导致问题。

您可以通过使用 linq 大大改善这一点。这样您就可以在一行中完成所有操作:

Public Sub DeleteByLocation(location As String)
    songs.RemoveAll(Function(x) x.GetLocation().Equals(location, StringComparison.OrdinalIgnoreCase))
End Sub

如果您确定只有一个匹配位置,请更改RemoveAll为以提高性能Remove

于 2014-08-26T15:49:46.933 回答