下面的代码失败了,我想这是因为Remove() - 方法破坏了循环顺序。但是我该如何解决呢?
List<string> test = new List<string>();
List<string> test2 = new List<string>();
test.Add("test");
test.Add("test");
test.Add("test");
test.Add("test");
foreach(string t in test)
{
test2.Add(t);
test.Remove(t);
}
答案 0 :(得分:5)
你对这个问题是正确的,解决方案是迭代副本而不是实际的列表
foreach(string t in test.ToList())
{
test2.Add(t);
test.Remove(t);
}
顺便说一下,你可以不用任何循环就做你想做的事情:
test2.AddRange(test);
test.Clear();
答案 1 :(得分:0)
它失败,因为foreach
迭代变量或只读。
解决错误的一种方法是将foreach
循环更改为for
循环,从最后一个元素开始循环,以便在删除元素时不会弄乱顺序。