没有另一个列表元素的 C# 列表(集合论,补码)[重复]

Posted

技术标签:

【中文标题】没有另一个列表元素的 C# 列表(集合论,补码)[重复]【英文标题】:C# List without Elements of another List (set theory, complement) [duplicate] 【发布时间】:2020-01-19 01:43:09 【问题描述】:

我有两个List<Image>ListAListB),我需要一种有效的方法来获取ListA 的元素,而不需要ListB 的元素(A\B)

例如:

ListA 包含 Image1Image2Image3Image4 ListB 包含 Image2Image4 ListA \ ListB 将是 Image1, Image3

我对 C# 比较陌生,欢迎提出一些建议

【问题讨论】:

var result = ListA.Except(ListB).ToList(); 你可能错过了之前的搜索,这个问题是likely duplicated 【参考方案1】:

如果ListA 的项目是唯一的,你可以提出一个简单的Linq 查询:

  using System.Linq;

  ...

  List<Image> result = ListA
    .Except(ListB)
    .ToList();

如果要修改现有列表(即ListA):

  ListA.RemoveAll(image => ListB.Contains(image));

【讨论】:

感谢您的帮助!我意识到我必须为我的自定义 Image 类实现 IEquatable 接口 @flexwend:嗯,是的,如果你必须比较不同的实例,它们可以彼此相等(即如果Image1 可以等于Image2) ;如果图像相等,当且仅当它们共享相同的 reference 时,您不必实现任何 IEquatable&lt;T&gt;

以上是关于没有另一个列表元素的 C# 列表(集合论,补码)[重复]的主要内容,如果未能解决你的问题,请参考以下文章