List .Contains()如何查找匹配项?

我有一个汽车对象列表

List cars = GetMyListOfCars(); 

我想知道列车中是否有车

 if (cars.Contains(myCar)) { } 

Contains用什么来确定myCar是否在列表中。 它是否在我的汽车对象上执行“ToString()”。 它是否使用Equals()方法,gethashcode()?

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

直接来自MSDN – 列出。包含:

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

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

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

它使用Equals()

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

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

Contains将尽快返回true – 即一旦找到符合条件的第一个项目。

迭代完所有项目后将返回false

关于它是如何做的 – 如果你不重写Equals ,它将使用引用类型的引用相等。