通过arraylist迭代并删除一个对象

时间:2014-08-26 15:37:10

标签: .net vb.net arraylist iteration remove-method

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

    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)。非常感谢!

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题。

首先,您不是在比较相同的情况,因为位置之后没有.ToLower()。

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

使用linq可以大大改善这一点。这样你就可以在一行中完成所有工作:

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

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