除了先将键保存在列表中然后遍历该列表并逐一删除每个项目之外,是否有更好的方法根据条件从哈希表中删除多个项目?通用列表提供了一个“RemoveAll”方法,我可以将匿名函数传递给该方法,但似乎没有 HashTable 的等效方法。注意:我使用的是 .NET Framework 2.0
最佳答案
这实际上取决于您的应用程序。如果您的应用程序是多线程的并且是 pre .NET 4.0,通常最好使用 ReaderWriterLock/ReaderWriterLockSlim
并获得读取器锁,构建所需 key 的列表删除,然后升级为写锁,并在列表上执行循环以删除 key 。这样,当您遍历 Hashtable
以删除键时,其他读者可以访问它而不会被锁定。
现在,如果您可以升级到 .NET 4.0,ConcurrentDictionary
将非常出色并且竞争更少!如果您继续使用 .NET 2.0,我会推荐 Dictionary
,即使它本身不是您问题的一部分。
UPDATE 如果您的应用程序不是多线程,不需要锁定,但您仍然需要构建键列表,因为在迭代时调用 Remove()使枚举器无效。所以基本上,根据您对问题的评论,您的做法是正确的。
关于c# - 在循环中从哈希表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7417710/