VB.NET - 循环跳过ListBox中的项目

时间:2012-10-19 11:49:43

标签: vb.net loops

我有一个列表框,其中列出了目录(不是本地的,通过网络)。 我试图循环该列表框并删除任何空目录。 但是,我注意到它只是跳过一些空目录..我发现如果我运行循环3到5次它会得到它们全部,但这不是很有效。

My Loop:

Dim i As Integer
i = 0
While i < ListBox1.Items.Count
   If IO.Directory.GetFiles(ListBox1.Items.Item(i), "*.*").Length = 0 Then
      ListBox1.Items.RemoveAt(i)
   End If
i = i + 1
End While

所以我只是想知道是否有更有效的方法来检查目录的内容或我可以实现此目的的另一种方式,而无需多次运行循环。

1 个答案:

答案 0 :(得分:2)

ListBox1.Items.Count每次都会被重新评估,随着时间的推移,你的循环越来越短缺了一些项目。快速解决方案可能只是在循环时标记要删除的项目。

Dim toRemove As New List(Of ListBoxItem)
For Each item as ListBoxItem in ListBox1.Items
   If IO.Directory.GetFiles(item, "*.*").Length = 0 Then
      toRemove.Add(item)
   End If
Next

For Each item as ListBoxItem in toRemove
    ListBox1.Items.Remove(item)
Next

(可能有更好的方法,但这是我头脑中的快速解决方案)