Поскольку ваш тип не переопределяет Equals, будет использоваться реализация Equals по умолчанию, т. Е. Ссылочное равенство. Поэтому Contains будет истинным, если коллекция содержит того самого экземпляра .
Чтобы использовать собственное сравнение, реализуйте IEqualityComparer<T>
(например, для сравнения идентификаторов) и передайте экземпляр вашего компаратора в метод Contains. (Предполагается, что вы можете использовать расширения LINQ, поскольку «родной» метод ICollection<T>.Contains
не имеет перегрузки IEqualityComparer.)