我有两个清单:
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;
我不完全确定这意味着什么,或者我如何滥用这个功能。有人能帮我解释一下吗?我这样做是因为这个问题的答案:
答案 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();
上的MSDN
答案 2 :(得分:0)
您也可以使用Except扩展方法完成此操作。假设uniquePositions是您所有职位的列表。
var safePositions = uniquePositions.Except(positionsThatCannotBeMovedTo).ToList();
除了设置差异运算符,并且当您使用整数列表时,默认比较器就可以了。