[csharp]
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;
}
}
本文探讨了在C#中如何正确地重载等于(==)和不等于(!=)运算符来比较自定义类的实例,避免递归崩溃的问题,并提供了一个具体的例子。
330

被折叠的 条评论
为什么被折叠?



