C# LINQ Union未进入重写的Equals方法
在使用C# LINQ Union未进入重写的Equals方法,c#,linq,C#,Linq,在使用LINQ合并两个对象(车辆)列表时,我尝试删除重复项,如: var list = list1.Union(list2); 我已经重写了Equals方法,代码甚至都不会进入它。但是,此代码会进入覆盖: Vehicle v1 = new Vehicle(); Vehicle v2 = new Vehicle(); if (v1.Equals(v2))....... 编辑 车辆覆盖的签名如下: 我还实现了IEquatable 我不希望将比较器传递给Union方法,因为我希望车辆类中有逻辑
LINQ
合并两个对象(车辆)列表时,我尝试删除重复项,如:
var list = list1.Union(list2);
我已经重写了Equals方法,代码甚至都不会进入它。但是,此代码会进入覆盖:
Vehicle v1 = new Vehicle();
Vehicle v2 = new Vehicle();
if (v1.Equals(v2)).......
编辑
车辆覆盖的签名如下:
我还实现了IEquatable
我不希望将比较器传递给Union方法,因为我希望车辆类中有逻辑
我做错了什么?您与
IEquatable
无关,它只是一个选项,但不是必需的必须执行的。我认为您没有正确覆盖您的Equals
,它应该是这样的:
public override bool Equals(object other) {
//your own code
}
public override int GetHashCode() {
//your own code
}
注意关键字override和类型object
的参数匹配基本对象的虚拟Equals
方法。您需要实现getHashCode
也可能重复我也做了这件事-我会更新以防出错
public override bool Equals(object other) {
//your own code
}
public override int GetHashCode() {
//your own code
}