我尝试过相关问题的多行代码,但它们似乎对我没用。
我有两个List<Square>
s:
List<Square> List1 = new List<Square> { sq1, sq2, sq3 };
List<Square> List2 = new List<Square> { sq1, sq5, sq7 };
我想删除List2
中已List1
的所有方格。我试过这段代码:
var test2NotInTest1 = List1.Where(l1 => !List2.Any(l2 => l1.Contains(List2)));
来自相关问题,但根本没有用。我仍然是这个新手,所以我可能只是输错了。我希望你能帮助我!
答案 0 :(得分:3)
这不适合你吗?
var test2NotInTest1 = List2.Except(List1);
如果Square
是class
(不是struct
)并且列表元素指向相同的变量,那么这应该有效。否则,您需要在Square
类/结构上实施IEquatable
(或者至少提供正确的GetHashCode
和Equals
函数)。
答案 1 :(得分:2)
使用RemoveAll方法。
List2.RemoveAll(x=>List1.Contains(x));
或者,如果您想删除尺寸相同的方块,可以使用以下
List2.RemoveAll(x => List1.Any (y=> x.x == y.x && x.y == y.y && x.width == y.width && x.height == y.height));
答案 2 :(得分:1)
这是原始代码的工作方式:
var test2NotInTest1 = List2.Where(l1 => !List1.Contains(l1));
这里只有Square
似乎是一个类,List.Contains
需要IEqualityComparer<Square>
的实现,在内部调用它来比较Square对象,检查这个{{ 3}}