Ваша проблема исчезнет, если вы используете:
public override int GetHashCode()
{
return 0;
}
Обратите внимание, что это всего лишь тест отладки, а не реальное предложение
Теперь, когда мы знаем, что это проблема, позвольте мне объяснить.
Ваш объект имеет сильную идентичность (равно) и слабую идентичность (GetHashCode). Идентификатор GetHashCode можно представить как номер корзины. Эти идентификаторы не должны изменяться после их вставки в хеш-таблицу, в противном случае операции хеш-таблицы перестают работать правильно. Имея GetHashCode (), возвращающий 0, я дал ему самый слабый из всех идентификаторов, «все в одной корзине», но это не изменилось.
Обратите внимание, что GetHashCode () - это просто повышение производительности, если вы довольны производительностью, все готово. Если нет, еще один простой хэш-код должен исключить все сравнения, используемые в методе Equal. Что-то вроде:
return LastName.GetHashCode() ^ FirstName.GetHashCode();
Помните, что GetHashCode () - это повышение производительности, не тратьте слишком много времени на его вычисление. Возможно, в приведенном выше примере следующий хэш-код мог бы быть лучше:
return LastName.GetHashCode();