2014-10-06 146 views
0

下面的代码失败,我想这是因为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); 
} 

回答

5

你是对这个问题,解决的办法是遍历一个副本,而不是实际列表

foreach(string t in test.ToList()) 
{ 
    test2.Add(t); 
    test.Remove(t); 
} 

顺便说一句,你可以做你想做的,而无需使用任何循环:

test2.AddRange(test); 
test.Clear(); 
+0

谢谢你,先生! – Dave 2014-10-06 11:05:33

0

它因失败,因为foreach迭代变量或只读。

解决错误的一种方法是将foreach循环更改为for循环,从最后一个元素开始循环,以便在删除元素时不会弄乱顺序。

相关问题