Метод Equals создает исключение NullReferenceException - PullRequest
0 голосов
/ 06 апреля 2020

Я недавно пришел к этой проблеме. У меня есть базовый 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. Проблема состоит. У меня есть красный, что проверка равенства в базовом классе, даже если мы передаем дочерний класс в метод не должно быть проблемой. Любая помощь будет оценена!

...