C#列表插入foreach

时间:2014-12-18 16:34:53

标签: c# foreach insert

我有以下循环:

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循环中的一些内容。导致错误的是什么?

4 个答案:

答案 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()。