是否有更好的方法可以根据条件从哈希表中删除多个项目,而不是先将密钥保存在列表中,然后迭代并逐个删除每个项目? Generic列表提供了一个“RemoveAll”方法,我可以传递一个匿名函数,但似乎没有HashTable的等效方法。注意:我使用的是.NET framework 2.0
答案 0 :(得分:0)
据我所知。只是迭代列表并以任何方式删除密钥有什么问题?如果你必须经常这样做,那就让它成为一个功能......
如果您使用的是.NET Framework 3.5或更高版本,LINQ可能会让您的目标更容易实现。
答案 1 :(得分:0)
这实际上取决于您的应用程序。如果您的应用程序是多线程的并且预先 .NET 4.0,通常最好使用ReaderWriterLock/ReaderWriterLockSlim
并获取读卡器锁,构建要删除的键列表,然后升级写入锁定,并在列表上执行循环以删除键。这样,当您在Hashtable
上迭代要移除的键时,其他读者可以访问它而不会被锁定。
现在,如果你可以使用.NET 4.0,那么ConcurrentDictionary
就很棒了,并且争用更少!如果你继续使用.NET 2.0,我建议使用Dictionary
,即使它本身不是你问题的一部分。
更新如果您的应用程序不多线程,则无需锁定,但您仍需要构建密钥列表,因为在迭代时调用Remove()使枚举器无效。所以基本上,在你对这个问题发表评论时,你正确地做到了。