我有一个汽车对象列表
List<Car> cars = GetMyListOfCars();
我希望看看列车中是否有车
if (cars.Contains(myCar))
{
}
包含什么用于确定myCar是否在列表中。它是否有&#34; ToString()&#34;在我的车对象上。它是否使用Equals()方法,即gethashcode()?
我看到我可以传入我自己的IEqualityComparer来强制我自己的实现,但只是想了解默认情况下它的作用。
答案 0 :(得分:18)
此方法使用默认相等性确定相等性 比较器,由对象的实现定义 IEquatable(Of T).T的Equals方法(列表中值的类型)。
此方法执行线性搜索;因此,这种方法是一种 O(n)操作,其中n是Count。
所以最终取决于T
如何实现IEquatable.Equals()。对于大多数对象,这将是一个参考比较,除非重写。内存中的相同位置是同一个对象。
答案 1 :(得分:5)
它使用Equals()
此方法使用默认相等性确定相等性 比较器,由对象的实现定义 IEquatable(Of T).T的Equals方法(列表中值的类型)。
答案 2 :(得分:1)
Contains
会尽快返回true
- 这是符合条件的第一个项目。
所有项目被迭代后,将返回false
。
关于 它是如何做的 - 如果你不覆盖Equals
,它将使用参考类型的引用相等。