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

Best way to iterate through Hashtable and conditionally remove entries in VB.NET

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

这是我写的:

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 中引发错误的情况下从您正在迭代的内容中删除条目?普遍这样做是个坏主意吗?

借助 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()

将此与您的实际循环相结合以从哈希表中删除项目,您应该能够使用以下 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