List <t> .Contains()如何查找匹配项?</t>

时间:2012-02-13 16:58:45

标签: c# .net list collections contains

我有一个汽车对象列表

 List<Car> cars = GetMyListOfCars();

我希望看看列车中是否有车

if (cars.Contains(myCar))
{
}

包含什么用于确定myCar是否在列表中。它是否有&#34; ToString()&#34;在我的车对象上。它是否使用Equals()方法,即gethashcode()?

我看到我可以传入我自己的IEqualityComparer来强制我自己的实现,但只是想了解默认情况下它的作用。

3 个答案:

答案 0 :(得分:18)

直接来自MSDN - List<T>.Contains:

  

此方法使用默认相等性确定相等性   比较器,由对象的实现定义   IEquatable(Of T).T的Equals方法(列表中值的类型)。

     

此方法执行线性搜索;因此,这种方法是一种   O(n)操作,其中n是Count。

所以最终取决于T如何实现IEquatable.Equals()。对于大多数对象,这将是一个参考比较,除非重写。内存中的相同位置是同一个对象。

答案 1 :(得分:5)

它使用Equals()

  

此方法使用默认相等性确定相等性   比较器,由对象的实现定义   IEquatable(Of T).T的Equals方法(列表中值的类型)。

http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx

答案 2 :(得分:1)

Contains会尽快返回true - 这是符合条件的第一个项目。

所有项目被迭代后,将返回false

关于 它是如何做的 - 如果你不覆盖Equals,它将使用参考类型的引用相等。