枚举hashset并从中删除元素

时间:2013-04-02 08:29:33

标签: c# linq hashset

我想通过一个HashSet并对每个元素进行(复杂)检查,这会导致保存元素,从HashSet中删除元素或什么也不做。

由于foreach循环不允许我更改HashSet并且索引不可用,我不知道如何执行任务(没有做一些缓慢的事情,比如先复制HashSet或应用几个LINQ操作,这意味着枚举HashSet不止一次)。

有什么建议吗?

1 个答案:

答案 0 :(得分:7)

您只需要使用RemoveWhere()和适当的谓词函数。

如果需要,你可以产生谓词的副作用,复制正在检查的元素(假设你的意思是“保存元素”)。也许这听起来有点hacky,但我觉得它会很好。

这是有效的,因为您的谓词函数将以未定义的顺序与HashSet的每个元素一起呈现,因此您可以决定如何处理每个元素,以及返回true以删除它和{{ 1}}保持它。

[编辑]这是一个代码示例。

false