我有一个“点/点”列表和一个行列表。当我删除同一个点时,我想删除连接到某个点的所有行。
到现在为止,我已尝试过以下方法:
foreach (Line g in lines)
lines.Remove(g.lineContainsPoint(g, selectionPoint));
方法lineContainsPoint:
public bool lineContainsPoint(Line s, Point c)
{
if (s.Source == c || s.Destination == c)
return true;
return false;
}
错误:
类型'System.InvalidOperationException'的未处理异常 发生在mscorlib.dll
其他信息:收集已修改;枚举操作 可能无法执行。
答案 0 :(得分:1)
您无法从当前正在迭代的列表中删除条目。您可以执行的操作是创建一个新列表,您只需插入要保留的条目(例如,您要删除的所有条目都不会插入新列表中)。
答案 1 :(得分:1)
您无法在 foreach 循环*中修改集合。您可以过滤要删除的行,然后从行列表中删除它们:
var linesToRemove = lines.Where(g => g.lineContainsPoint(g, selectionPoint)).ToArray();
foreach (Line line in linesToRemove)
lines.Remove(line);
或者,使用裸索引而不是foreach迭代列表:
var i = 0;
while(i < lines.Count) {
if (lines[i].lineContainsPoint(g, selectionPoint))
lines.RemoveAt(i);
else
i++;
}
IEnumerable
实施进行枚举时修改集合。