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

leo*_*ora 14 .net c# collections contains list

我有一个汽车对象列表

 List<Car> cars = GetMyListOfCars();
Run Code Online (Sandbox Code Playgroud)

我想知道一辆车是否在列表中

if (cars.Contains(myCar))
{
}
Run Code Online (Sandbox Code Playgroud)

包含什么用于确定myCar是否在列表中.它是否在我的汽车对象上执行"ToString()".它是否使用Equals()方法,gethashcode()?

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

Yuc*_*uck 18

直接来自MSDN - 列出<T>.包含:

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

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

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


hei*_*erg 5

它使用Equals()

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

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