Как List <T>.Contains() Найти подходящие элементы?

У меня есть список объектов автомобиля

 List<Car> cars = GetMyListOfCars();

и я хочу посмотреть, находится ли автомобиль в списке

if (cars.Contains(myCar))
{
}

Что Содержит использование, чтобы выяснить, есть ли myCar в списке. Делает ли это "ToString()" на моем объекте автомобиля. Использует ли он метод Equals(), gethashcode()?

Я вижу, что могу пройти в своем собственном IEqualityComparer, чтобы заставить свою собственную реализацию, но просто хотел понять, что она делает по умолчанию.

Ответ 1

Прямо от MSDN - список <T> .Контейнеры:

Этот метод определяет равенство, используя равенство по умолчанию сравнения, как определено реализацией объекта IEquatable (Of T).Equals метод для T (тип значений в списке).

Этот метод выполняет линейный поиск; поэтому этот метод является O (n), где n - Count.

Итак, в конце концов, это зависит от того, как T реализует IEquatable.Equals(). Для большинства объектов это будет сравнительное сравнение, если оно не будет превышено. То же место в памяти - это тот же объект.

Ответ 2

Он использует Equals()

Этот метод определяет равенство, используя равенство по умолчанию сравнения, как определено реализацией объекта IEquatable (Of T).Equals метод для T (тип значений в списке).

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

Ответ 3

Contains будет возвращать true, как только это возможно - это тот, когда найден первый элемент, соответствующий критериям.

A false будет возвращен после того, как все элементы были повторены.

Что касается того, как он это делает, он будет использовать ссылочное равенство для ссылочных типов, если вы не переопределите Equals.