【发布时间】:2011-07-07 19:43:32
【问题描述】:
我有 2 个列表:
ListA { 'A', 'B', 'C' } //ListA is DictA.Keys
ListB { 'B', 'X', 'Y' } //ListB is DictB.Keys
如果我执行ListA.Except(ListB),我会返回一个异常迭代器,这将使我可以遍历 ListA 以获取不在 ListB 中的任何项目。问题是它的实现也是简单地使用 ListA (出于某种原因,我认为它会创建一个新的项目集合,这些项目是不同的)。好吧,我发现它仍然使用 ListA 作为源,但只是使用了一种特殊类型的迭代器。所以,当然,当我从 ListA 中删除一个项目时,它会抱怨该集合已被修改。
我可以想出几种方法来做我想做的事,首先是复制 ListA 并在副本上执行 except。第二个是只做一个while循环。我只是想知道这个问题的最佳解决方案是什么,以及什么遵循标准准则。
如果我以错误的方式处理此问题,我很想知道这一点。我的主要目标是使用键作为比较从 DictA 中删除不在 DictB 中的所有内容。
【问题讨论】:
标签: c# linq dictionary ienumerable set-difference