我知道,在列舉枚舉時更改集合將導致collection was modified exception
。 但是,如果我從較大的子集合中獲得子集合,並且在枚舉子集合時,我從較大的子集中刪除某個項目,但仍然會出現此錯誤。在子集合上調用ToList
可解決此問題。但爲什麼會發生?集合在枚舉新子集合時被修改異常
var localCollection = someData.ToList(); // from DB Context
var localGrouped = localCollection.GroupBy(x => x.Id).Select(g => new { Id = g.Key, List = g.Select(x => x.Value) }); or .ToList(); // Here how I solve exception
var groups = new List<List<Int64>>();
while (localGrouped.Any())
{
var newSelected = new List<Int64>();
var firstGroup = localGrouped.First();
newSelected.Add(firstGroup.Id);
localGrouped.Remove(firstGroup);
var similiarGroups = localGrouped.Where(x => x.List.Intersect(firstGroup.List).Any()).ToList();
if (similiarGroups.Any())
{
foreach (var similiarGroup in similiarGroups)
{
//Changing something here in parent collection causes exception
newSelected.Add(similiarGroup.Id);
localGrouped.Remove(similiarGroup);
}
}
groupsOfParcels.Add(newSelected);
}
您仍在枚舉子集合中的外部集合。 – Shoe
不是@Shoe。外部循環是'while(localGrouped.Any())',它會在每次迭代開始時迭代localGrouped,但不會迭代* over。 – jwg