迭代Hashtable并有条件地删除VB.NET中的条目的最佳方法

时间:2015-03-24 21:58:40

标签: vb.net iteration hashtable

在VB.NET中,我有一个HashTable,我想迭代并有条件地从中删除条目。我已经编写了以下代码来完成这项工作,但我想知道是否有任何创造性的方法来简化代码。仅仅创建第二个列表来执行此操作似乎是不对的。

这是我写的:

Dim ModsToRemove As New List(Of String)
For Each ModKey As DictionaryEntry In ModHashTable
    If ModKey.Key.ToString.Contains("Criteria") Then
        ModsToRemove.Add(ModKey.Key.ToString)
    End If
Next
For Each ModKey As String In ModsToRemove
    ModHashTable.Remove(ModKey)
Next

是否有另一种方法可以执行不需要创建第二个列表和第二个循环的相同操作?是否有可能从您正在迭代的内容中删除条目而不会在VB.NET中抛出错误?这样做是不是一个坏主意?

1 个答案:

答案 0 :(得分:2)

借助Resharper和LINQ的一些帮助,您可以通过以下方式简化表达。

此处的代码块可以重写为使用LINQ而不是嵌入式IF语句

For Each ModKey As DictionaryEntry In ModHashTable
    If ModKey.Key.ToString.Contains("Criteria") Then
        ModsToRemove.Add(ModKey.Key.ToString)
    End If
Next

相当于

Dim modsToRemove As List(Of String) = (From modKey As DictionaryEntry In 
modHashTable Where modKey.Key.ToString.Contains("Criteria") 
Select modKey.Key.ToString).ToList()

将此与您的实际循环相结合以从Hashtable中删除项目,您应该能够使用以下3行代码获得上述示例的等效功能:

For Each key As String In (From modkey As DictionaryEntry In modHashTable Where modkey.Key.ToString.Contains("Criteria") Select modkey.Key.ToString).ToList()
  modHashTable.Remove(key)
Next