比较两个列表并删除相同的结果c#

时间:2014-12-18 17:25:08

标签: c# list comparison

我有两个清单:

List<int> positionsThatCannotBeMovedTo =...
List<int> desiredLocations =...

我正在尝试删除所有无法移动到所需位置的位置,以创建安全位置列表:

List<int> safePositions = new List<int>(uniquePositions);
safePositions.RemoveAll(positionsThatCannotBeMovedTo);
然而,它引发了错误:

&#34; Argument1:无法转换为&#39; System.Collections.Generic.List&#39;到&#39; System.Predicate&#39;

我不完全确定这意味着什么,或者我如何滥用这个功能。有人能帮我解释一下吗?我这样做是因为这个问题的答案:

Compare two lists for updates, deletions and additions

3 个答案:

答案 0 :(得分:6)

RemoveAll需要Predicate<T>,但您要传递一个列表:

safePositions.RemoveAll(x => positionsThatCannotBeMovedTo.Contains(x));

答案 1 :(得分:2)

除了另一个列表的元素之外,还有另一种方法可以获取包含元素的列表

List<int> positionsThatCannotBeMovedTo = new List<int>() {1,2,3,4,5,6,7};
List<int> uniquePositions = new List<int>() {5,6,7,8,9,10};
List<int> safePosition = uniquePositions.Except(positionsThatCannotBeMovedTo).ToList();

Enumerable<T>.Except

上的MSDN

答案 2 :(得分:0)

您也可以使用Except扩展方法完成此操作。假设uniquePositions是您所有职位的列表。

var safePositions = uniquePositions.Except(positionsThatCannotBeMovedTo).ToList();

除了设置差异运算符,并且当您使用整数列表时,默认比较器就可以了。