我有以下循环:
List<Reminders> reminds = new List<Reminders>();
//...
foreach (Reminders remind in reminds)
{
//....
reminds.Insert(id, new Reminders() { Title = remind.Title, Content = remind.Content, Checked = true });
}
但是,foreach
循环中出现错误。
foreach (Reminders remind in reminds)
如果我删除reminds.Insert
语句,则不再出现错误。我试图更新foreach
循环中的一些内容。导致错误的是什么?
答案 0 :(得分:4)
将您的代码更改为:
List<Reminders> reminds = new List<Reminders>();
...
foreach (Reminders remind in reminds.ToList())
{
....
reminds.Insert(id, new Reminders() { Title = remind.Title, Content = remind.Content, Checked = true });
}
请注意后面的.ToList()提醒。
说明:在foreach中枚举集合时,不允许修改集合。 .ToList()将创建另一个临时集合,该集合在foreach循环期间将是constrant。
答案 1 :(得分:2)
没错,你在同一个列表中进行迭代。您需要创建一个临时列表,并在循环中添加该临时列表中的元素。之后,当foreach完成时,您需要使用方法AddRange:
reminds.AddRange(tempList);
答案 2 :(得分:1)
如果您想要更新某些条目,那么您只需将每个条目的属性Checked
设置为true
即可添加新条目:
List<Reminders> reminds = new List<Reminders>();
...
foreach (Reminders remind in reminds)
{
....
remind.Checked = true;
}
您不得修改您正在迭代的列表。
答案 3 :(得分:0)
不,您不能在迭代它时插入项目。你的结果将是错误的。 您需要创建一个临时列表并在之后执行AddRange()。