我正在尝试使用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类中的逻辑。

我在这里做错了什么?

最佳答案

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

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

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

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

关于c# - LINQ联合不进入重写的Equals方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19157347/

10-13 01:29