Как 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
.