gpt4 book ai didi

c# - 在循环中从哈希表中删除项目

转载 作者:行者123 更新时间:2023-11-30 18:40:59 25 4
gpt4 key购买 nike

除了先将键保存在列表中然后遍历该列表并逐一删除每个项目之外,是否有更好的方法根据条件从哈希表中删除多个项目?通用列表提供了一个“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com