将列表中的一个元素移动到另一个列表中

本文关键字:列表 元素 移动 另一个 一个 | 更新日期: 2023-09-27 18:25:37

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

将列表中的一个元素移动到另一个列表中

您对这个问题是正确的,解决方案是迭代一个副本,而不是实际的列表

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

顺便说一句,你可以在不使用任何循环的情况下做你想做的事:

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

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

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