когда я пытаюсь перегрузить operator == и!= в С# и переопределить Equal в соответствии с рекомендациями, я обнаружил, что у меня нет возможности отличить обычный объект и null. Например, я определил класс Complex.
public static bool operator ==(Complex lhs, Complex rhs)
{
return lhs.Equals(rhs);
}
public static bool operator !=(Complex lhs, Complex rhs)
{
return !lhs.Equals(rhs);
}
public override bool Equals(object obj)
{
if (obj is Complex)
{
return (((Complex)obj).Real == this.Real &&
((Complex)obj).Imaginary == this.Imaginary);
}
else
{
return false;
}
}
Но когда я хочу использовать
if (temp == null)
Когда temp действительно null, происходит какое-то исключение. И я не могу использовать ==, чтобы определить, является ли lhs нулевым, что вызовет бесконечный цикл.
Что мне делать в этой ситуации.
Один из способов, о котором я могу думать, - это что-то вроде Class.Equal(object, object) (если оно существует) для обхода ==, когда я делаю проверку.
Каков нормальный способ решения проблемы?
Спасибо.