LINQ 联合不会进入重写的等于方法

本文关键字:于方法 方法 重写 LINQ | 更新日期: 2023-09-27 18:33:48

我试图在合并两个对象(车辆)列表时删除重复项,使用如下LINQ

var list = list1.Union(list2);

我有overridden the Equal的方法,代码甚至不会进入它。 但是,此代码确实会单步执行重写:

Vehicle v1 = new Vehicle();
Vehicle v2 = new Vehicle();
if (v1.Equals(v2)).......

编辑

车辆覆盖的签名如下:

我也实施IEquatable<Vehicle>

 public bool Equals(Vehicle other)
 {                     
 }
 public override int GetHashCode()
 {            
 }

我宁愿不传递联盟方法的比较器,因为我希望在车辆类中传递逻辑。

我在这里做错了什么?

LINQ 联合不会进入重写的等于方法

你与IEquatable<Vehicle>无关,它只是一个选项,但不是必需的must-do。我认为您没有正确覆盖Equals,它应该看起来像这样:

 public override bool Equals(object other) {                     
   //your own code
 }
 public override int GetHashCode() {            
   //your own code
 }

请注意关键字 override 和类型为 object 的参数,它与基对象的虚拟Equals方法匹配。