如果我有类型的对象 MyBullList<MyBull> orig:

// Just an example
MyBull x = getMeTheObjectWithIdFromDB(9);

orig.add(x);

// Again same? data object
MyBull y = getMeTheObjectWithIdFromDB(9);

为什么这是错误的?

// This is false, even though all the properties
// of x and y are the same.
orig.Contains<MyBull>(y); 
有帮助吗?

解决方案

默认情况下,对象将公开基于参考的平等。如果您需要自定义规则,例如基于ID字段的平等,则需要覆盖 EqualsGetHashCode 方法。

其他提示

如果您可以使用Linq,那么您可以

class Vessel
{
    public int id { get; set; }
    public string name { get; set; }
}

...

var vessels = new List<Vessel>() { new Vessel() { id = 4711, name = "Millennium Falcon" } };

var ship = new Vessel { id = 4711, name = "Millencolin" };

if (vessels.Any(vessel => vessel.id == ship.id))
    Console.Write("There can be only one!");

这是因为正在通过参考比较Mybull实例。从.net,x和y的角度来看 不同的实例 因此不等。

为了解决这个问题,您必须 覆盖平等和Gethashcode方法 (这意味着您可能应该实施 IEquatable<MyBull> 并覆盖==和!=运算符)。

您的mybull对象实现了吗 IEquatable<T>.Equals?此方法将确定两个对象的平等性

由OP要求

您的Mybull课程将实现Iquable

public class MyBull : IEquatable<MyBull>

然后您需要覆盖 Equals 方法

public bool Equals(MyBull theOtherMyBull)

正如David Neale在下面提到的那样,当您比较同一类型的对象时,最好使用它。覆盖对象。equals and object.gethashcode也将起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top