我收到错误:收集已修改;枚举操作可能无法执行。我试图删除除当前之外的所有打开的表单对象:
FormCollection fc = Application.OpenForms;
foreach (Form form in fc)
{
if (form.ToString().Contains("_MainFrom.Form1"))
{
// Do nothing
}
else
{
form.Hide();
form.Dispose();
}
}
答案 0 :(得分:7)
您无法修改枚举的集合。
使用foreach (Form form in fc.Cast<Form>().ToList())
答案 1 :(得分:2)
更改
foreach (Form form in fc)
到
foreach (Form form in fc.OfType<Form>().ToList())
这样您就可以在开始从原始集合中删除内容之前将OpenForms集合复制到新集合。
答案 2 :(得分:1)
您无法修改执行枚举的集合(例如foreach
)。您应该在这里使用其他方法,例如Remove
或使用for
循环。
答案 3 :(得分:0)
你的问题是:“我正在修改Open表单的集合,方法是在迭代表单时关闭其中一个表单,并在迭代时收到我正在修改Open表单集合的错误。”
答案:要么不使用foreach
迭代,要么在迭代期间不修改集合。否则他们会发现。
最常见的方法是将此类操作分为两个步骤:
在你的情况下:
var toClose = fc.Where(
form => form.GetType().FullName.Contains("_MainFrom.Form1"));
toClose.ToList().ForEach(form => {
form.Hide(); form.Dispose();
});