В вашем вопросе есть несколько моментов, которые стоит обсудить.
Для сравнения ts[i]
и t
вы используете оператор равенства ==
. По умолчанию этот оператор выполняет проверку равенства ссылок между двумя операндами, другими словами, это эквивалентно вызову object.ReferenceEquals(ts[i], t)
. Это означает, что два операнда считаются равными, если и только если они являются двумя ссылками на одну и ту же ячейку памяти.
Если это не равенство семанти c, которое вы собираетесь использовать для класса Team
, вам необходимо переопределить методы Equals
и GetHashCode
и оба оператора ==
и !=
. После этого ваш код будет автоматически использовать равенство semanti c, которое вы определили в своих переопределениях. Начните с здесь , если вам нужно больше подробностей об этом.
Второй важный момент связан с NullReferenceException
. Если вы позвоните t[i].Equals(t)
, а t[i]
- это ссылка null
, тогда вы получите NullReferenceException
. Таким образом, у вас есть следующие варианты:
- проверяет, является ли
t[i]
ссылка null
перед вызовом Equals
- , вместо оператора
- используется оператор равенства stati c метод
object.Equals
вместо
Последнее, но не менее важное, как указано в других ответах на то, что вы пытаетесь сделать , уже реализовано в. NET framework и вам следует использовать уже существующий Contains
метод расширения.
Обратите внимание, что при использовании уже существующего Содержит метод расширения вам все равно необходимо переопределить элементы равенства Team
класс, как объяснено выше.
В качестве альтернативы вы можете решить использовать эту перегрузку метода расширения Contains , которая позволяет вам указать желаемое равенство semanti c на сайте вызова с помощью пользовательского Сравнение равенства (реализация IEqualityComparer<Match>
в вашем случае). Это может быть полезно, если по какой-либо причине имеет смысл определить несколько различных семантик равенства для класса Team
(в зависимости от контекста). Если вы всегда хотите сравнить Match
экземпляры, используя то же самое равенство semanti c, выберите первый вариант переопределения членов равенства класса (как описано выше) и используйте перегрузку Содержит только один параметр .