我有两个字符串集合:CollectionA是存储在系统中的对象的StringCollection属性,而CollectionB是运行时生成的List。如果有任何区别,CollectionA需要更新以匹配CollectionB。所以我设计了我期望成为一个简单的LINQ方法来执行删除。当不修改枚举集合时,为什么会出现“集合已被修改;枚举操作可能无法执行”?
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
但我得到的strDifferences一个"Collection was modified; enumeration operation may not execute"
错误...即使它是从集合被修改单独枚举!我最初设计了这个明确来规避这个错误,因为我的第一个实现会产生它(因为我在CollectionA
之间列举并且仅仅在!CollectionB.Contains(str)
时才删除)。任何人都可以了解为什么这个枚举失败了吗?
'ToArray()'会在这里变得更好吗?没有必要使用'List'。 – svick 2010-05-07 21:22:44
@svick这是我一直想知道的事情,但那会是我在另一天要问的问题。提供它还没有被问到,当然 - - 点击 - – 2010-05-07 21:24:46
@GraceNote在这里捕获:http://stackoverflow.com/questions/1105990/is-it-better-to-call-tolist-or-toarray-in -linq-queries – nawfal 2013-06-05 14:27:16