Gra*_*ote 19 c# linq enumeration
我有两个字符串集合:CollectionA是存储在系统中的对象的StringCollection属性,而CollectionB是在运行时生成的List.如果存在任何差异,CollectionA需要更新以匹配CollectionB.所以我设计了我期望的一个简单的LINQ方法来执行删除.
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
Run Code Online (Sandbox Code Playgroud)
但我"Collection was modified; enumeration operation may not execute"在strDifferences上收到错误...即使它是一个与被修改的集合中的单独枚举!我最初明确地设计了这个来逃避这个错误,因为我的第一个实现会产生它(因为我在列举CollectionA并且只是删除时!CollectionB.Contains(str)).谁能解释为什么这个枚举失败了?
Mar*_*ers 27
这两者并非完全分开.Where不会单独复制该集合.它在内部保留对原始集合的引用,并在您请求时从中获取元素.
您可以通过添加ToList()强制Where来立即迭代集合来解决您的问题.
var strDifferences = CollectionA
.Where(foo => !CollectionB.Contains(foo))
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13939 次 |
| 最近记录: |