【发布时间】:2013-10-19 08:14:05
【问题描述】:
我有两个名为 List1 和 List2 的列表。
现在说 List1 和 List2 有 5 个元素 {a,b,c,d,e}。现在,如果我从 List1 中删除 {b,c} 并将 {f,g,h} 添加到 List1,我怎样才能使 List2 相等(通过对其执行添加和删除操作。)。
【问题讨论】:
-
为什么不
List2 = List1?
我有两个名为 List1 和 List2 的列表。
现在说 List1 和 List2 有 5 个元素 {a,b,c,d,e}。现在,如果我从 List1 中删除 {b,c} 并将 {f,g,h} 添加到 List1,我怎样才能使 List2 相等(通过对其执行添加和删除操作。)。
【问题讨论】:
List2 = List1?
“(通过对其进行添加和删除操作。)”
为什么会有这个限制?
最简单、最可靠且可能最快的方法:
List2 = List1.ToList();
但如果你真的想要它:
List2.RemoveRange(List2.Except(List1)); // You may have to write RemoveRange()
List2.AddRange(List1.Except(List2));
【讨论】:
List1 和List2 的引用不同。因此,对于List1 的进一步更新将不会反映到List2。
Except 返回一个序列,而 Remove/Add 需要一个元素作为参数
AddRange()编辑
让 List2 只是 List1 的一个引用,例如:
List<string> list1 = new List<string>();
List<string> list2 = list1;
修改list1也会影响list2
【讨论】:
@Henk Holterman 提出了正确的方法(在答案的第一部分),但如果你想要你在 OP 中提到的内容,那么你可以使用这个
list2.RemoveAll(l => !list1.Contains(l));
list2.AddRange(list1.Except(list2));
【讨论】: