在循环中从Hashtable中删除项

本文关键字:删除 Hashtable 循环 | 更新日期: 2023-09-27 18:08:47

是否有更好的方法从基于条件的哈希表中删除多个项目,而不是首先将键保存在列表中,然后通过迭代并逐个删除每个项目?泛型列表提供了一个"RemoveAll"方法,我可以向它传递一个匿名函数,但似乎没有HashTable的等效方法。注意:我使用的是。net framework 2.0

在循环中从Hashtable中删除项

这取决于您的应用程序。如果您的应用程序是多线程的,并且pre . net 4.0,通常最好使用ReaderWriterLock/ReaderWriterLockSlim并获得读取锁,构建要删除的键的列表,然后升级到写锁,并在列表上执行循环以删除键。这样,当您遍历Hashtable以删除键时,其他读取器可以在不被锁定的情况下访问它。

现在,如果你能得到。net 4.0, ConcurrentDictionary是辉煌的,有更少的争论!如果你继续使用。net 2.0,我推荐Dictionary,尽管它本身不是你问题的一部分。

UPDATE如果您的应用程序是不是多线程的,则不需要锁,但您仍然需要构建键列表,因为在迭代时调用Remove()会使枚举器无效。所以基本上,你做的是正确的根据你对问题的评论

据我所知没有。这样遍历列表并删除键有什么问题呢?如果你必须经常这样做,那就把它变成一个函数…

如果您正在使用。net框架3.5或更高版本,LINQ可能会使您的目标更容易实现。