在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中抛出错误?这样做是不是一个坏主意?
答案 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