LINQ Union没有进入重写的Equals方法

时间:2013-10-03 10:54:55

标签: c# linq

我正在尝试使用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()
 {            
 }

我宁愿不将比较器传递给Union方法,因为我想要Vehicle类中的逻辑。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:6)

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

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

 public override int GetHashCode() {            
   //your own code
 }

注意关键字覆盖,类型object的参数与虚拟 Equals基本方法相匹配对象