【问题标题】:Compare 2 Lists with Except() Method but it didnt work将 2 个列表与 Accept() 方法进行比较,但它不起作用
【发布时间】:2019-12-30 01:00:01
【问题描述】:

我想与“除方法 2”列表进行比较。对象存储在这些列表中。

如果我使用 except 方法,则不会过滤任何内容,尽管存在相同的对象。

我的目标:

我想要列表“chkpoints”中所有不在列表“chkpointslist”中的对象。

最好的方法是什么?或者我做错了什么?

List<checkpoint> chkpoints = new List<checkpoint>();
List<checkpoint> chkpointslist = new List<checkpoint>();
chkpointslist = database.loadChecklistpoints(checklistid);
chkpoints = database.loadCheckpoint(type);
chkpoints = chkpoints.Except(chkpointslist).ToList();

【问题讨论】:

  • checkpoint 是否覆盖 EqualsGetHashCode?如果不是,它将执行引用相等,这意味着具有相同值的类的两个实例将不相等。有Except 的重载,您可以在其中传递IEqualityComparer&lt;checkpoint&gt; 来告诉它如何确定两个checkpoint 对象是否相等。

标签: c# list merge compare except


【解决方案1】:

Enumerable.Except 使用默认的相等比较器来比较值。因此,如果您的 checkpoint 类没有 IEquatable,则您的所有 checkpoint 实例都将被读取为唯一的。

来自 .NET 文档:

如果你想比较一些自定义数据类型的对象序列,你必须在帮助类中实现IEquatable&lt;T&gt;泛型接口。

Enumerable.Except 文档(上面链接)上有关于如何创建 IEquatable 帮助器类的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多