我有一个类,我想重载在c#中的==运算符。我已经有一个.Equals覆盖,正常工作。当我尝试使用我的==运算符时,它在我的对象(Person)上给了我一个空引用异常。如果我试图检查它是否为null,它将依次调用相同的运算符来检查它是否为null并创建一个无限循环。这似乎是一个巨大的缺陷,我无法找出正确的方法来做到这一点。超载时无限递归==
public static bool operator ==(Person person, object obj)
{
return person == null ? person.Equals(obj) : false;
}
public static bool operator !=(Person person, object obj)
{
return !(person == obj);
}
不应该是return person!= null? person.Equals(obj):false; –
与'null'比较时,应该使用'!object.ReferenceEquals(person,null)'来确保(并明确表示)你正在检查引用的相等性。 – dlev
是的,你是对的谢谢 – viper110110