Я недавно пришел к этой проблеме. У меня есть базовый Stamp
класс. Затем я сделал два унаследованных класса OwnedStamp
и AuctionStamp
. Я переопределил метод Equals
и GetHashCode
в классе Stamp
следующим образом:
public override bool Equals(object obj)
{
if(obj == null || this.GetType().Equals(obj.GetType()))
{
return false;
}
else
{
Stamp stamp = obj as Stamp;
return this.Title == stamp.Title;
}
}
public override int GetHashCode()
{
return Title.GetHashCode();
}
Я также перегрузил эти операторы в том же классе:
public static bool operator ==(Stamp lhs, Stamp rhs)
{
return lhs.Equals(rhs);
}
public static bool operator !=(Stamp lhs, Stamp rhs)
{
return !lhs.Equals(rhs);
}
Тогда я есть такой сценарий:
OwnedStamp checkStamp = check.GetStampByTitle(stampTitle);
if(checkStamp != null && checkStamp.Price <= toCompare.Price)
{
picked.Add(check);
}
checkStamp
- это не null
, и он содержит правильную информацию, в которой я нуждаюсь, но когда я проверяю равенство для null
, это выдает мне исключение. У меня есть другие строки с кодом, где я проверяю равенство между двумя марками любого типа. Я пробовал пару различных реализаций метода Equals. Проблема состоит. У меня есть красный, что проверка равенства в базовом классе, даже если мы передаем дочерний класс в метод не должно быть проблемой. Любая помощь будет оценена!