public class MyClass
{
public int ID;
/*
public static bool operator ==(MyClass c1, MyClass c2)
{
//下面这段代码中的“==”调用会进入递归,直至崩溃
if (c1 == null || c2 == null)
{
return c1 == c2;
}
return c1.ID == c2.ID;
}
public static bool operator !=(MyClass c1, MyClass c2)
{
//下面这段代码中的“==”调用会进入递归,直至崩溃
if (c1 == null || c2 == null)
{
return c1 != c2;
}
return c1.ID != c2.ID;
}
*/
//正确的方法
public static bool operator ==(MyClass c1, MyClass c2)
{
//将c1对象转为object再进行判断
//这里的object.Equals(c1, null)也可以写成
//c1 as object == null
if (object.Equals(c1, null) || object.Equals(c2, null))
{
return object.Equals(c1, c2);
}
return c1.ID == c2.ID;
}
public static bool operator !=(MyClass c1, MyClass c2)
{
if (object.Equals(c1, null) || object.Equals(c2, null))
{
return !object.Equals(c1, c2);
}
return c1.ID != c2.ID;
}
}